1.IID:Interface indentifier
CLSID:class indentifier GUID
GUID:global unique indentifier
GUID是一个16字节长的结构,它用于标示Class的时候,就是CLSID,用于标示接口的时候,就是IID。
比如接口INSSBuffer有一个表示它的GUID:E1CD3524_11D2_9EED_......
而IID_+接口名用于字母表示接口,他们三者一一对应,如IDD_INSSBuffer
UUID: Universally Unique Identifier,它是生成唯一标示符的标准,GUID是它的一个应用
2 com接口(抽象类)不能有任何数据成员
3.com中的接口就是一个抽象类,component(组件)相当于object,用户不能直接访问类对象(即object,component),只能访问它的接口,所有COM组件对外提供的都是 接口,不是类。
HRESULT hr = CoCreateInstance(CLSID_Object,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,(void **) &pUnk)
CLSID_Object:用来唯一标识一个对象的CLSID(128位)。
CLSCTX_INPROC_SERVER:调用进程内服务
IID_IUnknown:返回pUnk的类型,在CLSID_Object中实现
pUnk:用于返回一个CLSID_Object对象,它仅代表其中的IID_IUnknown接口部分,接口本身是由一个指针管理的,所以返回一个指向指针的指针。
5.com:组件对象模型(Component Object Model)
6.com技术是ole,activex的基础,com是技术,ole,activex是建立在其上的应用
7.由于所有COM对象必须具备的两大特性:引用计数(addref和release)和多接口(QUERYINTERFACE),
COM定义了一个叫做INUKNOWN的标准接口:
CLASS INUKNOWN
{ PUBLIC:
VIRTUAL HRESULT QUERYINTERFACE(RIID RIID, VOID **PPOBJ)==0;
VIRTUAL ULONG ADDREF()=0;
VIRTUAL ULONG RELEASE()=0;
};
所有COM接口继承自它
8.如果类实现了多个接口,可以返回不同接口对象以调用不同接口里的方法
9.在C++内部,虚函数是用虚函数表来记录的,所以指向接口的指针实际上是一个指向指针的指针。
10.HRESULT是一个long型的数值,不是句柄
11.COM组件分为进程内组件,本地进程组件,远程组件