{ Copyright (c) 咏南工作室 Author: 陈新光 Email: hnxxcxg@yahoo.com.cn Date: 2006.11.02 ToDo: com(com+) } windows DNA(分布式网络应用程序体系结构),这个方案基本COM+技术,该技术成熟可靠。为对象分布到网络上不同的地方提供了支持。可以将业务逻辑以业务服务对象的形式,将其作为COM+组件放置在地理位置不同的服务器上,从而实现真正意义上的空间分离。 许多年以来,COM一直是WINDOWS编程的一个重要方面,因为它允许从各种语言中创建的可复用组件。MICROSOFT在它自己的产品中充分使用COM。COM开发已经成为许多WINDOWS开发人员的标准习惯。在开发团队中,COM库方面的投入非常大。 现有的WIN32应用程序能够消费.net功能度的某些部分,并且.net应用程序能够消费COM对象和DLL。 COM(COMPONENT OBJECT MODEL)组件对象模型。它定义了一种让客户模块和服务器模块能够通过接口进行通信的标准方式。接口的实现细节被抽象化,而且COM只关注接口本身。模块指的是应用程序或DLL,这两个模块可能运行在同一台计算机上,也可能运行在经由一个网络连接的不同计算机上(后者由DCOM处理)。一个接口实现对于一个客户的某种服务形式,所有COM接口都基于IUNKNOWN接口。 .net运行在一个叫CLR(COMMON LANGUAGE RUNTIME)的虚拟机中。一个语言中立的虚拟机。 COM+是COM的最新版本,对COM进行了改进,并集成了DCOM(分布式COM)、MTS(微软事务服务器)和MSMQ(微软消息队列)等一大堆相关的技术和产品。 用COM来封装对象。 com+作为WINDOWS 2000和WINDOWS XP的标准部分一起推出。windows98不支持com+。 com的实现是以DLL为载体,COM组件的物理文件是一个DLL文件。 COM通过接口与CLIENT 应用程序通信。一个COM对象能够按照程序员的意愿实现任意多个接口。接口必须委托给类实现。接口在类型库中进行声明。 COM 对象必须要在WINDOWS的注册表中进行注册。COM的注册方式:RUN|REGISTER ACTIVEX SERVER。 COM+的注册方式:RUN|INSTALL COM+ OBJECTS。 NOTES:COM和MTS把组件的所有配置信息都保存在WINDOWS的系统注册表中。COM+把大多数的组件信息保存在一个新的数据库中,称为COM+目录(COM+ CATALOG)。com+目录把com和mts的注册模型统一起来,并提供了一个专门针对组件的管理环境。打开WINDOWS的组件服务,可以看到已经安装好的COM+组件以及它的接口方法。激活的COM+组件是旋转的。 ADD NEW PROJECT->NEW ITEMS->ACTIVEX LIBRARY 创建一个COM/COM+项目。 FILE|NEW|OTHER|COM OBJECT COM对象向导。 调用COM/COM+的应用程序,首先要USES类型库单元。然后创建COM/COM+对象。 library firstcom; uses comserv; exports {用来访问类工厂} dllGetClassObject, {检查服务器是否已销毁了基所有对象} dllCanUnloadNow, {注册COM服务器} dllRegisterServer, {删除COM服务器} dllUnregisterServer; 导出的四个函数定义在COMSERV单元中。 第一步定义需要在服务器中实现的接口。应该将它定义成一个单独的单元。 com数据类型包含基本数据类型:INTEGER、SMALLINT、BYTE、SINGLE、DOUBLE、WIDESTRING、VARIANT和WORDBOOL。 com不支持Delphi的string和Tstring类型。 Tstrings类型向oleVariant类型的转换,用到了可变数组。 variant是Delphi对com最早的支持形式。 variant和oleVariant的区别在于前者支持所有类型,后者只支持在automation中兼容的类型。 --------------------------------------------------- com的缺点: COM是一个二进制对象模型,程序员共享已编译过的组件。类型系统的实现稍有不同就会妨碍交叉语言的 有效使用。COM只具有有限的语言独立性。还借助于一个不是十分稳定的引用计数机制来分配和释放用于对象的内存。一切都依赖于用来标识接口和类的GUID,而DCOM中甚至存在更多的限制。通过防火墙使用DCOM是不可能的。 重写COM的最终结果是.net framework。这是一个与MS原始初衷大相径庭的解决方案。 ---------------------------------------------------