欢迎来到天天文库
浏览记录
ID:36409427
大小:519.00 KB
页数:43页
时间:2019-05-10
《COM组件技术积累》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第1章COM基本概念§1.1什么是COM所谓COM(ComponetObjectModel,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发者语言是否一致以及是否运行于同一台计算机。COM规范所描述的即是如何编写组件,遵循COM标准的任何一个组件都是可以被用来组合成应用程序的。至于对组件采取的是何种编程语言则是无关紧要的,可以自由选取。作为一个真正意义上的组件,应具备如下特征:1)实现对开发语言的封装。2)
2、以二进制形式发布。3)能够在不妨碍已有用户的情况下被升级。4)在网络上的位置必须能够被透明的重新分配。在Windows操作系统平台上,有一些用COM形式提供的组件模块极大地丰富了Windows的功能,而且也使Windows功能扩展更加灵活,例如:1)DiretX多媒体软件包。它以COM接口的形式为Windows平台提供了强大的多媒体功能,现广泛用于游戏娱乐软件及其他多媒体软件的开发。2)RDO(remotedataobjet,远程数据对象)和DAO(dataaccessobject,数据访问对象)数据库访问对象库。它以COM自动化对象的形式为数据库应用提供了便捷的操作方法
3、,特别适合于在BASIC语言或其他一些高级语言中使用。而数据访问一致接口OLEDB/ADO(activedataobject,活动数据对象)更淋漓尽致地发挥了COM接口的作用。3)InternetClientSDK。它提供了一组COM库,为应用系统增加Internet特性提供了底层透明的一致操作。其它还有一些组件如MAPI(messagingAPI,消息应用编程接口)、ADSI(activedirectoryserviceinterface,活动目录服务接口)等,它们都提供了一致、高效的服务。从整个Windows操作系统来看,COM成了系统的基本软件模型,它带来的是灵活性
4、和高效率,以及应用开发的一致性。§1.2COM对象与C++对象比较COM对象建立在二进制一级的基础上,而C++对象建立在源代码一级的基础上,但从特性上,可以作一比较。1)封装性:COM对象的数据成员的封装以组件模型为最终边界,对于用户是完全透明的、不可见的;而C++对象的封装特性只是语义上的封装,对于对象用户是可见的。2)可重用性COM对象的可重用性表现在COM对象的包容和聚合,一个对象可以完全使用另一个另一个对象的所有功能;而C++对象的可重用表现在C++类的继承性,派生类可以调用其父类的非私有成员函数。1)多态性C++对象的多态性体现了C++语言用类描述事物的高度抽象
5、的特征;COM对象也具有多态性,但这种多态性需要通过COM对象所具有的接口才能体现出来,就像C++对象的多态性需要通过其虚函数才能体现一样。§1.1COM对象和接口COM提供的是面向对象的组件模型,COM组件提供给客户的是以对象形式封装起来的实体。客户程序和COM组件程序进行交互的实体是COM对象。COM对象包括属性(也称为状态)和方法(也称为操作),对象的状态反映了对象的存在,也是区别于其他对象的要素;而对象所提供的方法就是对象提供给外界的接口,客户必须通过接口才能获得对象的服务。对于COM对象来说,接口是它与外界进行交互的唯一途径,因此,封装特性是COM对象的基本特征
6、。§1.1.1COM对象标识——CLSIDCOM组件的位置对于客户来说是透明的,因为客户并不直接去访问COM组件,客户程序通过一个全局标识符进行对象的创建和初始化工作,这个全局标识符就是CLSID。CLSID结构定义上与GUID一致。COM规范采用了128位全局唯一标示符GUID。这是一个随机数。手工创建128位GUID或者编写程序来产生GUID是件很麻烦的事。为此,MicrosoftVisualC++提供了两个工具实现这样的目的:UUIDGen.exe和GUIDGen.exe,前者是一个命令行程序,后者是一个基于对话框的应用程序。另外,COM库为我们提供了以下API函数
7、可以产生GUID:HRESULTCoCreateGuid(GUID*pguid)下面为示例工程中.rgs文件中CLSID的定义:Math.Obj.1=s'MyMathClass'{CLSID=s'{3B28F0D6-D029-484B-80D7-A946EB20E9BD}'}将示例工程的COM组件成功注册后,我们可以根据组件的CLSID在系统的注册表编辑器中找到组件的注册信息,如图1。图1系统注册表§1.1.1COM对象的数据类型nHRESULT:一个双字节的值,其最高位(bit)如果是0表示成功,1表示错误。常见的HRESU
此文档下载收益归作者所有