《COM 原理与应用》学习笔记 - 第一部分 COM原理

http://tech.ddvip.com   2007年03月20日    社区交流

本文详细介绍《COM 原理与应用》学习笔记 - 第一部分 COM原理

  ---------------------------------------------------

  CoGetClassObject 函数

  ---------------------------------------------------

  在 COM 库中,有三个 API 可用于对象的创建,它们分别是 CoGetClassObject、CoCreateInstnace 和 CoCreateInstanceEx。通常情况下,客户程序调用其中之一完成对象的创建,并返回对象的初始接口指针。COM 库与类厂也通过这三个函数进行交互。

HRESULT CoGetClassObject(const CLSID& clsid, DWORD dwClsContext,
COSERVERINFO *pServerInfo, const IID& iid, (void **)ppv);

  CoGetClassObject 函数先找到由 clsid 指定的 COM 类的类厂,然后连接到类厂对象,如果需要的话,CoGetClassObject 函数装入组件代码。如果是进程内组件对象,则 CoGetClassObject 调用 DLL 模块的 DllGetClassObject 引出函数,把参数 clsid、iid 和 ppv 传给 DllGetClassObject 函数,并返回类厂对象的接口指针。通常情况下 iid 为 IClassFactory 的标识符 IID_IClassFactory。如果类厂对象还支持其它可用于创建操作的接口,也可以使用其它的接口标识符。例如,可请求 IClassFactory2 接口,以便在创建时,验证用户的许可证情况。IClassFactory2 接口是对 IClassFactory 的扩展,它加强了组件创建的安全性。

  参数 dwClsContext 指定组件类别,可以指定为进程内组件、进程外组件或者进程内控制对象(类似于进程外组件的代理对象,主要用于 OLE 技术)。参数 iid 和 ppv 分别对应于 DllGetClassObject 的参数,用于指定接口 IID 和存放类对象的接口指针。参数 pServerInfo 用于创建远程对象时指定服务器信息,在创建进程内组件对象或者本地进程外组件时,设置 NULL。

责编:豆豆技术应用

正在加载评论...