CoCreateInstance

 函数功能描述:用指定的类标识符创建一个Com对象
CoCreateInstance


用指定的类标识符创建一个未初始化的对象。当在本机中只创建一个对象时,可以调用CoCreateInstance;在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数。

函数原形:
STDAPI CoCreateInstance(
  REFCLSID rclsid,     //创建的Com对象的类标识符(CLSID)
  LPUNKNOWN pUnkOuter, //指向接口IUnknown的指针
  DWORD dwClsContext,  //运行可执行代码的上下文
  REFIID riid,         //创建的Com对象的接口标识符
  LPVOID * ppv         //用来接收指向Com对象接口地址的指针变量
);

参数:
  rclsid
   [in] 用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。
  pUnkOuter
   [in] 如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。
  dwClsContext
   [in] 组件类别. 可使用CLSCTX枚举器中预定义的值.
  riid
   [in] 引用接口标识符,用来与对象通信。
  ppv
   [out] 用来接收指向接口地址的指针变量。如果函数调用成功,*ppv包括请求的接口指针。

返回值:
  S_OK
   指定的Com对象实例被成功创建。
  REGDB_E_CLASSNOTREG
   指定的类没有在注册表中注册. 也可能是指定的dwClsContext没有注册或注册表中的服务器类型损坏  
  CLASS_E_NOAGGREGATION
   这个类不能创建为聚合型。
  E_NOINTERFACE
   指定的类没有实现请求的接口, 或者是IUnknown接口没有暴露请求的接口.

注释:
   CoCreateInstance帮助者函数通过使用对象的CLSID,提供了一种便洁的方式与类对象连接,创建未初始化的实例,以及释放类对象。它封装了以下的功能:

   CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF);
   hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj);
   pCF->Release();

   当在本机中只创建一个对象时,调用CoCreateInstance是最方便的;如果要在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数;如果创建多个对象实例,可以获得类对象的IClassFactory 接口指针,并使用需要的方法,可以使用CoGetClassObject函数。

   在CLSCTX枚举器中, 你可以指定用来管理对象的服务器类型. 这些常量可以是CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER或是它们的任何组合. 常量CLSCTX_ALL被定义为这三个值的组合. 想获得更多的有关这些常量的用法,请参考CLSCTX.

实例:

  if ( SUCCEEDED( CoInitialize(NULL) ) )
  {
    // 如果成功初始化COM库,则继续初始化并运行应用程序...
    // 对于Win32应用程序, CoInitialize函数的pvReserved参数,必须为NULL. 此参数不能被用于32位COM,     
    // CoInitialize将会返回E_INVALIDARG,如果传递一个非NULL参数.
  }
  else
  {
    // 如果初始化COM库失败,则退出.
  }
  HRESULT hr;
  IComObject *pRet;
  hr = CoCreateInstance(CLSID_OFCOM,NULL,CLSCTX_INPROC_SERVER,IID_OFCOMOBJECT,
         (PPVOID)&pRet);
  if (SUCCEEDED(hr))
  {
      // 卸载不用的COM服务.
      CoFreeUnusedLibraries();
  }
  else
    ...
  ...
  pRet->Release();
  CoUninitialize();

 
要求:
  Windows NT/2000: 需要 Windows NT 3.1 或以后版本。
  Windows 95/98:   需要 Windows 95 或以后版本。
  头文件       :   objbase.h.
  库文件       :   ole32.dll.

参看:
CoGetClassObject, IClassFactory::CreateInstance, CoCreateInstanceEx, CLSCTX, (实例创建帮助函数)Instance Creation Helper Functions

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值