首页 > 代码库 > 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提供二进制级别的复用,而不是源代码级别的复用