发表于:2005-11-08 15:46:00
楼主
COM与DCOM的介绍
COM是组件式对象模型(Component Object Model)的英文缩写,是组件之间相互接口的规范,是OLE(Object Linking & Embedding)和ActiveX共同的基础,其作用是使各种软件构件和应用软件能够用一种统一的标准方式进行交互。COM不是一种面向对象的语言,而是一种与源代码无关的二进制标准。COM所建立的是一个软件模块与另一个软件模块之间的链接,当这种链接建立之后,模块之间就可以通过称之为“接口”的机制来进行通信。COM标准增加了保障系统和组件完整的安全机制,并扩展到分布式环境。
COM本质上仍然是客户/服务器模式。客户(通常是应用程序)请求创建COM对象并通过COM对象的接口操纵COM对象。服务器根据客户的请求创建并管理COM对象。客户和服务器这两种角色并不是绝对的。
基于分布式环境下的COM被称作DCOM(Distribute COM,分布式构件对象模型)。DCOM是ActiveX的基础,它实现了COM对象与远程计算机上的另一个对象之间直接进行交互。DCOM规范定义了分散对象创建和对象间通信的机制,规范本身并不依赖于任何特定的编程语言和操作系统,但目前该标准只在Microsoft Windows平台实现,这就意味着其它的操作系统平台(如UNIX)目前还不支持ActiveX。
DCOM的实现采用了DCOM库的形式,当DCOM客户对象需要DCOM服务器对象的服务时,DCOM库负责生成DCOM服务器对象并在客户对象和服务器对象之间建立初始连接,一旦返回服务器对象指针,DCOM库就不再参与客户对象与服务器对象之间的工作,两个对象之间可以自由地进行通信。
DCOM接口实际上时逻辑上和语义上相关联的函数集。服务器对象通过DCOM接口为客户对象提供服务,客户对象不需了解服务器对象的内部数据表示。接口可以看成两个软件构件之间的一种协议,协议表明服务器对象为客户对象提供一种且仅此一种服务。接口采用全局唯一标识符(GUID)来保证服务的唯一性。通常的DCOM构件提供多种服务,那么服务器对象为每一种服务实现一个接口。当客户对象指针指向相应的服务器对象时,它就激活服务器对象接口的相应函数。具体过程是:客户对象通过DCOM对象必须支持的IunKnown接口获得其它接口的指针。客户对象也许并不知道服务器对象的每个接口,但这并不妨碍客户对象对服务器对象的使用,它只用它知道的接口。当客户对象用完服务器对象的服务时,它会通知服务器对象,服务器对象就释放它所占有的内存。
DCOM的好处是显而易见的。由于接口的定义和功能保持不变,DCOM构件开发者可以改变接口功能、为对象增加新功能、用更好的对象来代替原有对象,而建立在构件基础上的应用程序几乎不用修改,大大提高了代码的重用性。