数功能描述:用指定的类标识符创建一个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

CoCreateInstance相关推荐

  1. CoCreateInstance 出错 ,返回 -2147221164 CLASS_NOT_REGISTERED ,原因

    今天发现有台机子执行 CoCreateInstance 总是不成功,而在其他的很多机子上是没有问题的. 追了半天发现这台机子的注册表权限不对.HKEY_CLASSES_ROOT的权限只有Everyon ...

  2. CoCreateInstance(转)

    CoCreateInstance 创建组件的最简单的方法是使用CoCreateInstance函数. 在COM库中包含一个用于创建组件的名为CoCreateInstance的函数.此函数需要一个CLS ...

  3. COM笔记-CoCreateInstance

    CoCreateInstance 创建组件的最简单的方法是使用CoCreateInstance函数. 在COM库中包含一个用于创建组件的名为CoCreateInstance的函数.此函数需要一个CLS ...

  4. CoInitialize\CoCreateGuid\CoCreateInstance

    CoInitialize是Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象.应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库 ...

  5. CoCreateInstance调用返回代码0x80040154的一种解决方法

    CoCreateInstance调用返回代码0x80040154的一种解决方法 前面的一篇博文中总结了开发Windows Thumbnail Handler的一些经验.在公司实际项目中,需要同时针对图 ...

  6. 关于C++调用::CoCreateInstance创建对象提示没有注册类的问题的解决

    关于C++调用::CoCreateInstance创建对象提示没有注册类的问题的解决   最近做一个C++项目的时候,遇到一个棘手的问题,是关于COM组件的,我完全不会这个技术,因为我没接触过C++后 ...

  7. 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误。hr = 0x8007045b, 系统正在关机。

    服务器有时自动重启: 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误.hr = 0x8007045b, 系统正在关机. 在服务中是:Volume Shadow Copy和 ...

  8. CoCreateInstance 做了什么 菜菜的

    CoCreateInstance 在里面会完成 CoGetClassObject 得到类厂对象 然后调用pClassFactory->CreateInstance(...)创建一个对象得到IUn ...

  9. 在调用CoCreateInstance时返回没有注册类?

    一日在调试一款山寨短信猫程序时,按照里面的文本要求,regsvr32 xxxx.dll注册了其com控件,但在编译其例子后运行时始终报"创建短信核心组件失败",一开始以为是系统问题 ...

最新文章

  1. 1001 A+B Format
  2. cvGEMM()函数(矩阵通用乘法运算)
  3. XamarinEssentials教程移除键值首选项的键值
  4. BZOJ3836 : [Poi2014]Tourism
  5. 如何注册iClap账号?
  6. Ruby on Rails 的检验方法(Validation Helpers)大全
  7. oracle 参照完整性,Oracle中用表外键来保证系统参照完整性
  8. mysql 存储过程 模糊查询_mysql 分页创建存储过程并实现模糊查询
  9. android 安装卸载应用提醒_Android程序使用代码的安装和卸载!!!
  10. 问题2----网速问题?造成的ORA-01034和ORA-27101
  11. java设计模式适配器模式_Java解释器设计模式
  12. linux环境下cmake安装及使用
  13. python创建ppt_python生成ppt的方法
  14. eclipse中文版导入导出java项目
  15. QOpenGLWight与QPainter混合渲染
  16. Android - View 和 ViewGroup
  17. 蓝桥 程序员节发橙子 (思维)
  18. 在项目中实现多数据源和读写分离的配置
  19. 时区缩写 UTC, CST, GMT, CEST 以及转换
  20. 小汪汪服务器不稳定,小汪汪闪退了怎么办 小汪汪闪退问题解决办法

热门文章

  1. 企业WEB项目商品管理图片上传
  2. Unity经典游戏教程之:合金弹头
  3. 中学计算机教室宣传标语,中小学教室、班级励志标语大全
  4. python gridfs_MongoDB GridFS
  5. Keil编译出现keilc error C183: unmodifiable lvalue错误
  6. [勇者闯LeetCode] 70. Climbing Stairs
  7. 笔记本突然没有wifi功能了?!我的解决办法
  8. 数据杂谈:数据库 上钻 下钻 切片 转轴含义的理解(含有例子)
  9. linux下的各种复制粘贴
  10. flex4 遮罩小示例-给图片添加相框(画框)