设为首页 加入收藏

TOP

12.1.1 COM接口
2013-10-07 00:15:40 来源: 作者: 【 】 浏览:79
Tags:12.1.1 COM 接口

第12章 COM组件技术操作技巧

COM是开发组件的一种方法,组件是一些小的二进制程序,它可以为操作系统或者应用程序提供服务。COM技术的发展进一步加强了程序的模块化编程(www.cppentry.com)的思想,使应用程序在更容易扩展与升级,具有更好的灵活性和动态性,COM支持了分部使应用程序的开发。

12.1  COM的概念和编程(www.cppentry.com)技巧

COM,即组件对象模型,是关于如何建立组件及如何通过组件建构应用程序的一个规范,是一种跨应用和语言共享二进制代码的方法。而C++(www.cppentry.com)是提倡源代码重用,源码级的复用容易产生错误,并且使得应用工程变得异常臃肿。COM组件是以Win32动态链接库(DLLs)或可执行文件(EXEs)的形式发布的可执行代码组成的。遵循COM规范编写的组件将能够满足对组件架构的所有需求。COM组件是动态链接的,COM使用DLL将组件动态链接起来,对于COM组件的封装是很容易的。COM组件按照一种标准的方式来宣布它们的存在。COM组件是一种给其他应用程序提供面向对象的API或服务的极好方法。

12.1.1  COM接口

1.接口的概念

在COM中,接口就是一组函数,它是不可变的。

任何一个组件都要包含一个IUnknown接口,客户同组件的交互都是通过这个接口完成的。在客户查询组件的其他接口时,也是通过这个接口完成的。IUnknown接口的定义包含在Win32 SDK中的UNKNOWN.H头文件中。

interface IUnknown
{   
virtual HRESULT _stdcall QueryInterface(const IID& iid,void **ppv) = 0;
virtual ULONG _stdcall AddRef() = 0;
virtual ULONG _stdcall Release() = 0;
}

在IUnknown中定义了一个名为QueryInterface的函数。客户可以调用QueryInterface来决定组件是否支持某个特定的接口。

2.接口的注意事项

所有的COM接口都需要继承IUnknown。

由于所有的COM接口都继承了IUnknown,每个接口的vtbl中的前3个函数都是QueryInterface、AddRef和Release。若某个接口的vtbl中的前3个函数不是这3个,那么它将不是一个COM接口。由于所有的接口都是从IUnknown 继承的,因此所有的接口都支持QueryInterface,组件的任何一个接口都可以被客户用来获取它所支持的其他接口。
 
非虚拟继承:注意IUnknown并不是虚拟基类,所以COM接口并不能按虚拟方式继承IUnknown,这是由于会导致与COM不兼容的vtbl。若COM接口按虚拟方式继承IUnknown,那么COM接口的vtbl中的头3个函数指向的将不是IUnknown的3个成员函数。
 
QuertyInterface可以用一个简单的if-then-else语句实现,但case语句是无法用的,因为接口标识符是一个结构而不是一个数。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.1.4 创建/删除快捷方式的技巧 下一篇12.1.5 C++类对象、DLL和 COM 的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: