《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 对象。

责编:豆豆技术应用

正在加载评论...