创建COM对象
2016-02-17 10:31
225 查看
成功初始化COM库之后,线程就可以安全使用COM接口了。为了能够使用COM接口,你的程序首先应该创建一个实现接口的对象。一般来说,有两种方式创建COM对象: 1.实现模块会提供创建对象的方法 2.COM提供了一个函数CoCreateInstance 例如,在什么是COM接口的文章中,Shape对象实现了IDrawable接口,下面将介绍第一种方法创建COM对象。
// Not an actual Windows function. HRESULT CreateShape(IDrawable** ppShape);
有了上面的函数,你就可以创建一个COM对象了。
IDrawable *pShape; HRESULT hr = CreateShape(&pShape); if (SUCCEEDED(hr)) { // Use the Shape object. } else { // An error occurred. }
接下来极少第二种创建COM对象的方法,也就是利用CoCreateInstance()函数来实现。CoCreateInstance函数提供了一种创建COM对象的通用机制。为了更好的理解与应用CoCreateInstance,你需要记住的是:两个COM对象可以实现同样的接口,一个COM对象也可以实现多个COM接口。那么,我们要如何指定我们创建的对象的类型呢?在COM中,任何一个对象或者接口都可以用一个128位的数字指定,即GUID,或者UUID。现已经有一些创建UUID的算法。 例如,Shape可以声明两个UUID的常量。
extern const GUID CLSID_Shape; extern const GUID IID_IDrawable;
其中,第一个常量用来标明Shape对象,第二个常量用来标明IDrawable接口,CLSID是类标识符,而IID是接口标识符。有了这些标识符,现在你就可以创建Shape实例了。
IDrawable *pShape; hr = CoCreateInstance(CLSID_Shape, NULL, CLSCTX_INPROC_SERVER, IID_Drawable, reinterpret_cast<void**>(&pShape)); if (SUCCEEDED(hr)) { // Use the Shape object. } else { // An error occurred. }
CoCreateInstance()函数有五个参数。第一个和第四个参数是类标识符和接口标识符。这两个参数的作用是告诉函数要创建一个一个Shape对象,请求分配一个指向IDrawable接口的指针。 设置第二个参数为NULL。第三个参数设置了一系列的标识符,这些标识符的主要目的是指定对象执行的内容。执行内容指定了对象在程序运行期间,该对象是否运行在同样的进程中,是否运行在同一台机器的不同进程中,或者运行在不同机器上。下面的表格给出了这个参数最常见的值。
Flag Description
CLSCTX_INPROC_SERVER Same process.
CLSCTX_LOCAL_SERVER Different process, same computer.
CLSCTX_REMOTE_SERVER Different computer.
CLSCTX_ALL Use the most efficient option that the object supports. (The ranking, from most efficient to least efficient, is: in- process, out-of-process, and cross-computer.)
第五个参数用来接收接口的指针,由于该函数是通用机制,故而数据类型是void**,调用者必须强制使得指针的地址变为void**。此外,检查该函数的返回值也是很有必要的。
相关文章推荐
- php fopen file_get_contents curl区别
- 如何用三个月时间获得三年经验
- 免密码自动生成ssh key
- linux环境配置java web项目之四——安装数据库
- Extjs二级联动
- Java 环境变量
- iOS清除xcode缓存和生成文件
- 度转度分秒、度分秒转度
- 一天一点xib:8高冷的xib
- 分布式事务
- 笔记
- 抽象数据类型之容器(二)
- 集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念
- 表格换色
- Android资源的离线方式
- Java NIO:浅析I/O模型
- SpannableString使用详解
- java实现top K排序
- OSGi.Demo知识点
- 系统分层架构设计参考