COM
OLE—对象链接嵌入
COM-对象组件模型
1.    接口:
根据COM规范,所有的接口都必须从IUnknown派生,可以是直接派生,也可以使间接派生。OLE系统的接口,很多接口最后字母是2或Ex,表妹它是一个继承接口,如:IViewObject2从IViewObject继承过来。【P47】
Class IDictionary{
Virtual BOOL Initialize() = 0;
Virtual BOOL LoadLibrary(String) = 0;
Virtual BOOL InsertWord(String, String) = 0;
Virtual void DeleteWord(String) = 0;
Virtual BOOL LookupWord(String, String*) = 0;
Virtual BOOL RestoreLibrary(String) = 0;
Virtual BOOL FreeLibrary() = 0;
}
2.    接口描述语言IDL
Interface IDictionary
{
   HRESULT Initialize();
   HRESULT LoadLibrary([in]string);
   HRESULT InsertWord([in]string,[in]string);
   HRESULT DeleteWord([in]string);
   HRESULT LookupWord([in]string,[outo]string*);
   HRESULT RestoreLibrary([in]string);
   HRESULT FreeLibrary();
}
可用功MIDL生成.h文件
3.接口的内存模式
每个成员函数的第一个参数是一个指向接口自身的this指针,this指针可以为我们提供COM对象的信息。C++的class可以以最简洁的方式描述COM接口。而且,用class描述接口隐藏了接口的虚函数表以及接口成员函数的this指针参数,使得接口的定义更易于理解。
多样化,MFC和ATL(活动模板库)分别采用了不同的机制来提供对COM接口的支持。【P46】
4.IUnknown接口—每个接口都必须从IUnknown继承过来,其原因在于IUnknown接口提供了两个非常重要的特性:生存期控制(“引用计数”)和接口查询(QueryInterface—完成接口之间的跳转)。
Class IUnknow
{
Public:
    Virtual HRESULT _stdcall QueryInterface(const IID& iid, void **ppv) = 0;
    Virtual ULONG  _stdcall AddRef() = 0;
    Virtual ULONG _stdcall Release() = 0;
};