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

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

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

  (savetime 注:下面代码中 ppv 指针的应用,好像应该是 void **)

HRESULT CoCreateInstance(const CLSID& clsid, IUnknown *pUnknownOuter,
DWORD dwClsContext, const IID& iid, void *ppv)
{
IClassFactory *pCF;
HRESULT hr;
hr = CoGetClassObject(clsid, dwClsContext, NULL, IID_IClassFactory,
(void *) pCF);
if (FAILED(hr)) return hr;
hr = pCF->CreateInstance(pUnknownOuter, iid, (void *)ppv);
pFC->Release();
return hr;
}

  从这段代码我们可以看出,CoCreateInstance 函数首先利用 CoGetClassObject 函数创建类厂对象,然后用得到的类厂对象的接口指针创建真正的 COM 对象,最后把类厂对象释放掉并返回,这样就把类厂屏蔽起来。

  但是,用 CoCreateInstance 并不能创建远程机器上的对象,因为在调用 CoGetClassObject 时,把第三个用于指定服务器信息的参数设置为 NULL。如果要创建远程对象,可以使用 CoCreateInstance 的扩展函数 CoCreateInstanceEx:

  HRESULT CoCreateInstanceEx(const CLSID& clsid, IUnknown *pUnknownOuter,

  DWORD dwClsContext, COSERVERINFO *pServerInfo, DWORD dwCount,

  MULTI_QI *rgMultiQI);

  前三个参数与 CoCreateInstance 一样,pServerInfo 与 CoGetClassOjbect 的参数一样,用于指定服务器信息,最后两个参数 dwCount 和 rgMultiQI 指定了一个结构数组,可以用于保存多个对象接口指针,其目的在于一次获得多个接口指针,以便减少客户程序与组件程序之间的频繁交互,这对于网络环境下的远程对象是很有意义的。

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

责编:豆豆技术应用

正在加载评论...