COM库中用于创建组件的三个函数

3个函数:

1.CoGetClassObject

2.CoCreateInstance

3.CoCreateInstanceEx


CoGetClassObject

1.创建一个类厂,

2.进程内组件对象,CoGetClassObject调用DLL模块的DLLGetClassObject引出函数创建类厂;

3.进程外组件,CoGetClassObject函数启动组件进程,一直等到组件进程它支持的COM类对象的类厂注册到COM中。


CoCreateInstance

创建COM对象

HRESULTCoCreateInstance(constCLSID& clsid,

                   IUnknown *pUnknownOuter,

                   DWORD dwClsContext,

                   constIID& iid,

                   (void **)ppv);


CoCreateInstance实现伪码

HRESULTCoCreateInstance(constCLSID& clsid,IUnknown

                  *pUnknownOuter,DWORD dwClsContedt,

                            constIID& iid,void *ppv)

{

  IClassFactory *pCF;

  HRESULT hr;

  hr = CoGetClassObject(clsid,dwClsContext,NULL,

                       IID_IClassFactory,(void*)pCF);

  if (FAILED(hr))

      return hr;

  hr = pCF->CreateInstance(pUnkOuter,iid,(void*)ppv);

  pCF->Release();

  return hr;

}


CoCreateInstanceEx

创建COM对象

HRESULTCoCreateInstanceEx(constCLSID& clsid,

        IUnknown *pUnknownOuter,

        DWORD dwClsContext,

        COSERVERINFO *pServerInfo,

        DWORD dwCount,

        MULTI_QI *rgMultiQI);

三个创建函数选用原则

(1)如果客户创建远程对象或者希望一次获取对象的多个接口指针,则选用CoCreateInstanceEx函数;

(2)如果客户希望获取类厂对象或者要调用类厂的某些成员函数,则选用CoGetClassObject函数;

(3)在其他情况下,使用CoCreateInstance函数创建对象。


客户程序调用COM库创建组件对象的顺序

通过CoCreateInstance调用CoGetClassObject;

COM库找到DLL程序并进入进程;

调用DllGetClassObject函数;

DllGetClassObject创建类厂;

DllGetClassObject函数把类厂接口指针返回给CoGetClassObject函数;

CoGetClassObject函数把类厂接口指针返回给CoCreateInstance函数;

CoCreateInstance函数得到类厂后,调用类厂的对象创建函数CreateInstance;

类厂创建COM对象;

类厂把COM对象返回给CoCreateInstance, CoCreateInstance函数返回COM对象接口指针给客户;

客户直接调用COM对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值