COM原理和应用----COM对象和接口.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
COM原理及应用----COM对象和接口 1、COM对象的理解    COM对象类似于C++语言中类的概念,类的每个实例代表一个COM对象,它也包括属性(即状态)和方法(即操作),状态反映对象的存在,方法就是接口。 2、COM对象的标识-CLSID   GUID是一个128位的随机数,重复概率极低。它的值来源于两部分:空间值(网卡地址或随机数)和时间值。   获得GUID值可以使用VC++提供的工具:GUIDGen.exe 和 UUIDGen.exe。或者使用COM库的API函数CoCreatGuid()。 3、COM对象与C++对象的比较 封装特性 在COM对象中,数据是完全封装在对象内部,外部不可能直接访问对象的数 据属性。通过COM对象和客户程序提供的接口成员函数访问对象的属性。COM对象 的数据成员的封装性是以组件为最终边界的,对于对象用户是完全透明的、不可 见的;而C++对象的封装特性只是语义上的封装,对于对象用户是可见的。 COM对象将数据完全封装在对象的内部。C++对象的封装是在语义上的封装,通过不同的数据类型实现数据的封装。 可重用性 COM对象的可重用性表现在COM对象的包容和聚合,一个对象可以完全使用另 一个对象的所有功能;而C++对象的可重用性表现在C++类的继承性,派生类可以 调用其父类的非私有成员函数。      COM对象的多态性通过其接口体现,C++对象的多态性通过其虚函数体现。 4、COM接口的作用和意义   COM规范的核心内容是关于接口的定义,虽然COM本身并不复杂,但是围绕COM接口有很多内容值得仔细探讨,包括接口的标识、接口函数的调用习惯、参数处理、接口与对象的关系以及接口与C/C++的关系、COM接口多具有的特性等。   COM定义了一套完整的接口规范,不仅可以弥补API作为组件接口的不足,还从分发挥了组件对象的优势,并实现了组件对象的多态性。 5、接口定义和标识 接口是包含了一组函数的数据结构,通过这组数据结构,客户代码可以调用 组件对象的功能。客户程序使用一个接口数据结构的指针来调用接口成员函数。接口 指针实际上又指向另一个指针,这第二个指针指向一组函数指针(即一组函数地址),成为接口函数表。接口函数表中每一项为4个字节的函数指针,每个函数指针与对象的具体实现联系起来。    从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代码可以调用组件对象的功能。   客户程序用一个指向接口函数结构的指针来调用接口成员函数。实际上接口指针指向另一个指针pVtable。 接口函数表称为虚函数表(Virtual Function Table ,简称vtable),指向vtable的指针为pVtable。对于一个接口来说,它的虚函数表vtable是确定的。 6、接口设计的问题   在接口成员函数中,字符串变量必须用Unicode字符指针,这是COM规范的要求。   COM API函数使用大多数语言惯用的_stdcall调用习惯。   用C语言定义COM接口,需要有结构体struct定义其接口结构,接口成员函数必须有一个this指针。   用C++语言定义COM接口,因为由C++语言class的实现机理可以看出,COM接口结构中的vtable与class的vtable(类的虚函数表)完全一致,因此,用class描述COM接口是最方便的手段。此时,接口成员函数隐藏了this指针。   class 型接口的说明要比struct 型接口的说明简捷得多。 7、COM接口与对象的联系   接口类只是一种描述,并不提供具体的实现过程。如果COM对象要实现接口,则COM对象必须以某种方式把它自身与接口类联系起来,然后把接口类的指针暴露给客户程序,于是客户程序就可以调用对象的接口功能了。   用 class型接口通过把接口指针(this)与对象数据绑定在一起的方法实现对COM接口的支持比较直观、简捷易于理解。实际上,也可以采用其他的方法来实现接口,只要接口成员函数中this指针(即接口指针)与对象数据能建立确定的连接,在接口成员函数中可以访问到对象数据即可。例如,VC++的MFC 库和ATL(active template library ,活动模板库)模板库分别采用了不同的机制来提供对COM接口的支持。 8、接口描述语言IDL   COM 规范在采用OSF的DCE规范描述远程调用接口IDL(interface description language ,接口描述语言)的基础上,进行扩展形成了COM接口的描述语言。接口描述语言提供了一种不依赖于任何语言的接口描述方法,因此,它可以成为组件程序和客户程序之间的共同语言。 COM 规范使用的IDL接口描述语言不仅可用于定义COM接

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档