COM 微软组件对象模型 简介(二)

       当定义自己的组件时候,必须符合COM规范,即直接或间接继承IUnknown接口,并按自己的类实现IUnknown中定义的三个函数。

 

interface IUnknown

          virtual HRESULT _stdcall QueryInterface(const IID& iid,void** ppv)=0;

          virtual ULONG _stdcall AddRef()=0;

          virtual ULONG _stdcall Release()=0;

};

 

      其中第一个QueryInterface用来查看(询问)当前的类是否实现(支持)某个接口.其中第一个参数iid用来标识要查看的接口的一个标志结构体.第二个参数ppv用来返回查找到的接口指针,没有找到为NULL,函数返回是HRESULT,可以用宏SUCCEEDED(hr)来判断返回值hr成功与否.

 

 

QueryInterface函数的一些实现原则:

 

         <1>QrueryInterface返回的总是同一IUnknown指针(即使直接间接继承自多个IUnknown).

         <2>若客户曾经获取过某个接口,那么它将总能获取此接口.

         <3>客户可以再次获取已经拥有的接口.

         <4>客户可以返回到起始接口.

         <5>若能够从某个接口获取某特定接口,那么从任意接口都将可以获取此接口.

 

---------------------------------------------------------------------------------------------

 

         函数AddRef增加一个使用的实例(因为都是用接口使用的,所以等于增加正在使用接口(同一个对象)的数量);函数Release完成AddRef相反的过程.

         这两个函数都是使用引用记数来完成的(和设计模式中取代指针的句柄的实现是类似的),

所以对于实现接口的一块内存,要负责维护它自己的引用记数.

 

 

参考资料:《COM技术内幕》

你可能感兴趣的:(COM 微软组件对象模型 简介(二))