研读了《MFC Windows程序设计》第十八章之后,对其中内容进行了简单的整理摘抄:
一、COM
1、COM的概念
COM:Component Object Model 组件对象模型
COM是一种方法,用于创建独立于任何编程语言的对象
COM对象具有“方法”,“方法”被分别组织在“接口”中,并通过“接口指针”调用它们
每一种COM对象都实现了一个名为IUnknown的接口,IUnknown包含三种方法,分别为
1)QueryInterface 返回指向另一个接口的指针
2)AddRef 增加对象的引用计数
3)Release 减小对象的引用计数
若有另外三个方法:Add、Substract和CheckSpelling
则应将Add和Substact分配给接口IMath,将CheckSpelling分配给接口ISpelling
因此这个COM有三个接口:
IUnknown、
IMath和
ISpelling
每个接口都有“接口标识”(IID)唯一标识,IID是一个128位的值,即使有相同的接口名称,但是接口标识不同。
2、实例化COM对象
COM类也由128位的值标识,标识类的GUID成为“类ID”(CLSID)
激活函数: CoCreateInstance —— 接受一个CLSID并返回指向对象的接口指针
IMath* pMath;
CoCreateInstance(CLSID_Object, NULL, CLSCTX_SERVER, IID_IMath, (void **)&pMath);
CoCreateInstance首先要实例化对象的类对象,再请求类对象去创建对象
大多数类对象都实现了一个特殊的COM接口IClassFactory(或
IClassFactory 2
),可调用
IClassFactory::CreateInstance来创建对象实例
3、对象生存期
通过AddRef增加m_lRef,Release递减
m_lRef