一.CoCreateInstance

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包括请求的接口指针。

调用此函数需先调用CoInitialize方法初始化COM库

最后调用CoUninitialize释放资源

http://baike.baidu.com/view/1141927.htm

一般情况下,该方法即可满足

int main()
{// Initialize COM LibraryCoInitialize(NULL) ;trace("Call CoCreateInstance to create") ;trace("  component and get interface IX.") ;IX* pIX = NULL ; HRESULT hr = ::CoCreateInstance(CLSID_Component1,NULL, CLSCTX_INPROC_SERVER,IID_IX, (void**)&pIX) ;if (SUCCEEDED(hr)){trace("Succeeded getting IX.") ;pIX->Fx() ;          // Use interface IX.       trace("Release IX interface.") ;pIX->Release() ;}else{cout << "Client: \t\tCould not create component. hr = "<< hex << hr << endl ;    }// Uninitialize COM LibraryCoUninitialize() ;return 0 ;
}

二.CoCreateInstance的实现

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

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

三.类厂

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

http://blog.csdn.net/qlping2007/archive/2008/04/01/2237155.aspx

com学习笔记(6)类厂相关推荐

  1. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用

    ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...

  2. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  3. Machine Learning A-Z学习笔记12-分类模型性能评级及选择

    Machine Learning A-Z学习笔记12-分类模型性能评级及选择 1.简单原理 一般认为假阴性比假阳性更严重,如核酸检测 用混淆矩阵表示如下图 准确率驳论(Accuracy Paradox ...

  4. JAVA学习笔记(类的学习)

    JAVA学习笔记(类的学习) 类声明和类体 构造方法和对象创建 对象的引用和实体 成员变量 方法 方法重载 关键字this 包 import语句 访问权限 对象数组 反编译和文档生成器 JAR文件 1 ...

  5. python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程

    一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...

  6. 设计模式学习笔记1——类与类之间的关系

    1.继承关系 概念 继承又分为2种方式,一种叫实现继承,一种叫接口继承.参见笔记--[2种继承方式学习笔记].(https://blog.csdn.net/yhb1206/article/detail ...

  7. 冰冰学习笔记:类与对象(上)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  8. 冰冰学习笔记:类与对象(下)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  9. Mono源代码学习笔记:Console类(四)

    NullStream 类 (internal class) 下面就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...

最新文章

  1. BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
  2. boost::geometry::model::multi_polygon用法的测试程序
  3. html fmt转换日期格式,js通用时间格式转换函数
  4. python机器学习库xgboost——xgboost算法(有分类和回归实例)
  5. Atitit.获取approot api 应用根路径 java c#.net php asp
  6. Storm 的可靠性保证测试
  7. golang Java_goLang
  8. STM8学习笔记---union联合体的应用
  9. 15个最佳jQuery的翻页书效果的例子
  10. FAT32,EXFAT,FAT16和FAT12的所有信息
  11. 版本向量 使用css时正确区分IE版本[转]
  12. 北京信息科技大学计算机专业学科评估,北京信息科技大学学科评估结果排名(第四次):最新完整...
  13. springmvc配置中文乱码过滤器
  14. GBA编程和汉化常用软件汇总
  15. FPGA串口传图sobel边缘检测
  16. 华为云计算ie学习一IA部分(1)
  17. U大师安装系统后,Chrome主页被7654导航劫持解决方法
  18. 一个程序员的年度计划
  19. 移动应用开发 Android Studio安装教程
  20. 计算机制图的特点和原理,计算机地图制图原理、特点及发展趋势

热门文章

  1. 一个类型思考了 8 年,依旧是最好的! | 每日趣闻
  2. 学废了!提高工作效率的五个步骤! | 每日趣闻
  3. 离职后为讨薪资删公司数据,一技术开发工程师被判 11 个月
  4. 30 岁码农人生:人生至暗时,你依然能窥见光明
  5. shell--特殊位置参数变量及常用内置变量
  6. Fescar 发布 0.3.0 版本, 支持 Eureka 注册中心
  7. 一、 函数调用栈,执行上下文及变量对象
  8. 为什么下一个SaaS公司绝不会效仿Salesforce?
  9. 2016已经过去,2017即将开始
  10. javascript客户端检测技术