为什么要使用为什么要使用COMCOM开发程序?开发程序?吴长彬COMCOM的利弊的利弊团队(并行)开发需要一种好的集成方法团队(并行)开发需要一种好的集成方法COMCOM组件易于替换组件易于替换COMCOM与语言无关性与语言无关性COMCOM有利于软件的复用有利于软件的复用版本难以控制版本难以控制接口一旦发布就难以修改接口一旦发布就难以修改优点缺点COMCOM与三层体系结构与三层体系结构利用利用COMCOM易于实现三层体系结构:易于实现三层体系结构:表示层、企业层、数据层表示层、企业层、数据层企业层表示层数据层应用程序DBMS企业对象数据对象DCOMADOCOMCOM原理与方法原理与方法吴长彬COMCOM的相关概念的相关概念COMCOM表示表示ComponentObjectModel(ComponentObjectModel(组件对组件对象模型象模型)),,COMCOM不是编程语言、代码库或编译不是编程语言、代码库或编译器,而是个二进制规范。器,而是个二进制规范。接口(接口(InterfaceInterface))接口类型接口类型Iunkown——Iunkown——基本接口,基本接口,QueryInterfaceQueryInterface、、AddReAddReff、、ReleaseReleaseIdispatch——Idispatch——从从IunkownIunkown继承,如果程序不用脚本继承,如果程序不用脚本开发,最好不用该类型接口开发,最好不用该类型接口双接口(双接口(dual-interface)——dual-interface)——一般用于一般用于AutomatiAutomationon对象对象接口规则接口规则接口是不可变的接口是不可变的每一个接口具有唯一的标识符每一个接口具有唯一的标识符GUIDGUID函数应返回函数应返回HRESULTHRESULT字符串参数应为字符串参数应为UNICODEUNICODECOMCOM与面向对象技术与面向对象技术面向对象可以而且一般通过面向对象可以而且一般通过COMCOM实现,但实现,但COCOMM不一定都是面向对象的。不一定都是面向对象的。COMCOM可以具有与面可以具有与面向对象相同的特性。向对象相同的特性。封装性封装性继承性继承性多态性多态性ActiveXActiveXActiveXActiveX与一般的与一般的COMCOM的区别在于通常具的区别在于通常具有用户界面。有用户界面。DCOMDCOMDCOMDCOM((DistributedCOM)DistributedCOM)是是COMCOM的延伸,的延伸,它允许应用程序调用其他机器中的它允许应用程序调用其他机器中的COMCOM对象。对象。客户端执行程序服务端执行程序客户端应用程序ProxyDllStubDllserverDCOMDCOMDCOMDCOM与与COMCOM的区别的区别COMCOM有两种存在形式有两种存在形式,,动态连接库和可执行程序动态连接库和可执行程序,,但但DCOMDCOM必须是可执行程序必须是可执行程序..因为因为DCOMDCOM不可能在客不可能在客户程序的内存空间运行户程序的内存空间运行,,所以不能是动态连接库所以不能是动态连接库..COM(COM(动态连接库形式动态连接库形式))可以不用可以不用RPCRPC通信通信,,而而DCODCOMM必须使用必须使用RPCRPC远程调用远程调用..COMCOM程序配置简单程序配置简单,DCOM,DCOM配置较复杂配置较复杂..毕竟毕竟DCODCOMM牵涉到网络和安全性牵涉到网络和安全性..COM+COM+COMCOM与与MTSMTS((MicrosoftTransactionServeMicrosoftTransactionServerr)相结合产生了下一代的)相结合产生了下一代的MTS/COM+MTS/COM+。。MTS/CMTS/COM+OM+也用于解决分布式问题,但也用于解决分布式问题,但MTS/COM+MTS/COM+具具备了更好的品质:事务处理和安全机制。备了更好的品质:事务处理和安全机制。微软对微软对COM+COM+的定义为“基于的定义为“基于MicrosoftTransaMicrosoftTransactionServer(MTS)ctionServer(MTS)和组件对象模型和组件对象模型(COM)(COM)扩扩展的一组服务,提供了改良的线程和安全性、事务管展的一组服务,提供了改良的线程和安全性、事务管理、对象池、排队组件以及应用程序管理及打包”。理、对象池、排队组件以及应用程序管理及打包”。MTSMTS事务管理事务管理事务管理的运算对于所有数据的改变必须是完全事务管理的运算对于所有数据的改变必须是完全成功,并且把数据的状态成功地改变成另外一个成功,并且把数据的状态成功地改变成另外一个状态。否则所有事务管理执行的运算就必须...