首页 > 代码库 > COM的C++实现
COM的C++实现
把类的公共方法提取出来成为一个抽象基类,这就是接口
即接口是对外的部分,继承接口的类是实现部分
接口的唯一目的是强制派生类以虚函数的方式实现组件接口的方法
接口完整的描述了C++中Vtable的布局
COM只能通过一个Vtable指针来提供对它组件的访问,对组件实现的访问是不能的
COM的核心概念----通过使用Vtable来为组件的功能提供接口
pInterface -> _Vptr -> Vtable(&FUnc()) // Vtable的结构是通过接口描述出来的
For example:
ActiveX提供了接口的声明,而你则提供了接口的实现
COM最重要的API -- CoCreateInstance() -- 寻找组件,载入组件,返回所要求的接口指针
多数组件拥有多个接口,系统需要一种机制使客户可以访问某一特定的接口 -- QueryInterface
COM提供了把一个组件的功能分割到多个接口里的能力,每一个接口都把一个小的、准确定义的功能集展示出来。这样客户就可以直接与所需要的功能块打交道。
所有COM组件都需要实现一个被称为IUnknown的标准COM接口
IUnknown的功能: 1.提供了一种标准的途径QueryInterface, 用户可以通过该途径在指定的组件里要求一个特定的接口
2.帮助组件在生存期内进行管理: AddRef() Release()
1 class IUnknown 2 { 3 public: 4 virtual HRESULT QueryInterface(REFIID & riid, void ** ppv) = 0; 5 virtual ULONG AddRef() = 0; 6 virtual ULONG Release() = 0; 7 };
UUID:通用独有标示符 Universally Unique Identifier
GUID: 全局独有标示符 Global Unique Identifier
RPC : 远程进程调用 Remote Procedure Calls
COM提供二进制级别的复用,而不是源代码级别的复用