组件技术的本质COM理论知识.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
组件技术的本质COM理论知识

组件技术的本质COM理论知识 也许您对这个标题有些疑问,组件技术的本质是COM吗? 申明一点,此处所说的组件技术都是就windows平台而言的,那么在windows平台下,组 件的本质是什么?无可非议,COM!虽然,DCOM、MTS、COM+、甚至Not Net都已经常的被 挂在了程序员的嘴边,可是本质是什么?就是COM。暂且不谈我为何要这样说,或许在下 边的阐述中,您就会对这个问题自然而然的知道答案。 在介绍COM(Component Object Model ,组件对象模型)的时候,我们会省略一些细节,因 为我要可以将COM的很多细节都写了出来的话,我想我们其码要谈很长时间,再者,作者 在此也不敢说自己已经可以完全的驾驭COM。但会尽力的在本篇文章和以后的文章中对CO M作一个多方位的介绍,力争看过文章的朋友都可以对COM有一个明确的认识,并且可以 独立的完成COM组件的编写。让我们继续。   如上图所示,它就是一个完整的COM组件图,其实可以扩展到任何一个组件中,它们的关 系,也如上图所示,包含于被包含的关系。其中,CoClass是正真的封装接口的部分, 我们根据上图所示进行一步一步的分析,实际上,每一个Coclass都可以是一个COM对象 ,而每个CoClass又可以实现多个Interface,Interface在之前的文章中已经给以了介绍 ,那么我们此处标识的COM接口和Interface有什么区别呢?在一定的程度上而言,我们 所标识的COM接口和Interface可以认为是一个概念,只是此处为了更能明确的划分出它 们的每一个细节才这样做的,希望看到这篇文章的朋友不要混淆。一位朋友说的相当好 ,我们所谓的OOP就是源码级上将用户的操作上进行了一定的规范,而组件是从底层,二 进制上对用户的操作进行了一定的规范,所以组件才能有抹杀语言的区别!但无论是作 为一个小型的COM组件还是一个大型的COM组件,它都要遵守COM规范来编写,COM组件是 以Win32动态连接库(DLL)或是以可拨行文件(Exe)的形式而存在,每一个COM组件都是一 些二进制可执行文件。作为一个组件,必须要作到以下的几点: 它必须以给其它的客户端提供服务的形式而存在,当然,它也可以获取其它的组件的服 务。 COM组件可以动态的插入或卸出应用 COM组件必须是动态链接的 COM组件必须隐藏(封装)其内部实现细节 COM组件必须将其实现的语言隐藏 COM组件必须以二进制的形式发布 COM组件必须可以在不妨碍已有用户的情况下被升级 COM组件可以透明的在网络上被重新分配位置 COM组件按照一种标准的方式来宣布它们的存在 …… 它既然是以提供服务的形式而存在,并且是完全可以脱离物理机的限制,那么它是如何 被各个客户端所认识的呢?与接口类似,每个COM对象也有一个128位的GUID来标识,称 为CLSID(Class Identifier,类标识符或类ID),并且,它也是全球唯一的,可以结合接 口GUID进行理解。根据COM组件识意图,我们可以看出一个COM组件可以包含多个COM对象 ,而这些COM对象是如何联系的呢?我们是否可以通过对象A而去访问对象B呢?从理论上 而言,是不应该的,甚至一个COM组件只包含一个COM对象,COM对象之间是互不相关的, 但是在实际的操作中可以吗?当然可以,你会在后边看到相关的实例的。每一个COM对象 作为一个黑盒子,它的内部都有什么呢?就是对接口的实现!通过实现接口来封装逻辑 规则,这也是COM的本质!所以,在COM中,接口就是一切。我们可以说脱离接口的COM将 不会存在,而没有实现接口的COM是没有任何意义的,对于我们来说,COM组件、对象就 是一组接口的集合,只可以通过接口和COM打交道,没有任何接口访问权限的用户,其CO M组件对它是没有丝毫的用处的。这就是封装的体现。而在上两篇文章中我们介绍了接口 ,此处将不花费过多的笔墨进行阐述。 OK,在你对COM组件有了这些认识之后,我们现在就可以进行COM组件的进一步分步的讨 论,从其最细节的地方来进行讨论。(对于COM其它的一些知识,如:IMarshal,代理、 存根DLL等相关知识会在以后的文章进行专门的介绍) COM对象 (COM Object) COM对象?如何理解COM对象?他有什么东西? (在此处,仅以Object Pascal对本篇文章进行阐述)。COM对象是接口的集合没错,但是C OM对象是如何实现、驾驭这些接口的呢?其实,我们可以在ComObj单元中看到COM的很多 相关类,此处我们将以TComObject为例,以下代码摘自Delphi6 TComObject = class(TObject, IUnknown, ISupp

文档评论(0)

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

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

1亿VIP精品文档

相关文档