《COM 原理与应用》学习笔记 - 第一部分 COM原理
http://tech.ddvip.com 2007年03月20日 社区交流
本文详细介绍《COM 原理与应用》学习笔记 - 第一部分 COM原理
---------------------------------------------------
类厂和 DllGetObjectClass 函数
---------------------------------------------------
类厂(class factory)是 COM 对象的生产基地,COM 库通过类厂创建 COM 对象;对应每一个 COM 类,有一个类厂专门用于该 COM 类的对象创建操作。类厂本身也是一个 COM 对象,它支持一个特殊的接口 IClassFactory:
class IClassFactory : public IUnknown
{
virtual HRESULT _stdcall CreateInstance(IUnknown *pUnknownOuter,
const IID& iid, void **ppv) = 0;
virtual HRESULT _stdcall LockServer(BOOL bLock) = 0;
}CreateInstance 成员函数用于创建对应的 COM 对象。第一个参数 pUnknownOuter 用于对象类被聚合的情形,一般设置为 NULL;第二个参数 iid 是对象创建完成后客户应该得到的初始接口 IID;第三个参数 ppv 存放返回的接口指针。
LockServer 成员函数用于控制组件的生存周期。
类厂对象是由 DLL 引出函数 DllGetClassObject 创建的:
HRESULT DllGetClassObject(const CLSID& clsid, const IID& iid, (void **)ppv);
DllGetClassObject 函数的第一个参数为待创建对象的 CLSID。因为一个组件可能实现了多个 COM 对象类,所以在 DllGetClassObject 函数的参数中有必要指定 CLSID,以便创建正确的 class factory。另两个参数 iid 和 ppv 分别指于指定接口 IID 和存放类厂接口指针。
COM 库在接到对象创建的指令后,它要调用进程内组件的 DllGetClassObject 函数,由该函数创建类厂对象,并返回类厂对象的接口指针。COM 库或客户一旦拥有类厂的接口指针,它们就可以通过 IClassFactory 的成员函数 CreateInstance 创建相应的 COM 对象。
责编:豆豆技术应用