1.基本概念
COM表示Component Object Model(组建对象模型),是Microsoft生成软件组件的标准,
COM是构造二进制兼容软件组建的规范。即COM不是编程语言、代码库或编译器,二十个二进制规范,可以建立能够相互通信的组件,不管这些组件用什么编程语言和工具建立。COM可以让你专心开发应用程序,让编译器制造商去建立编译的组件。
2.COM术语
  组件代码(Component code) 这是组件进行的实际工作。建立组件基础结构后,组件要干点事。例如组件要进行与发票相关的工作,则需要建立组建代码来计算汇总、进行发票查找,等等。
  接口(Interface)接口是使任何程序能访问该组件的功能。接口是一组公用功能定义,使组件向程序和其他组建提供的。接口告诉其他部分,你的组件能干什么,如何利用它的功能。
  GUID(Globally Unique Identifier,全球唯一表示符) GUID被赋予生成的每个COM组件和接口,向操作系统和其他软件唯一标识这个组建。对组件或接口进行任何改变时,就产生新的GUID。GUID是个128位整数,例如,Microsoft MSFlexGrid控件的GUID为6262D3A0-11CF-91F6-C2863C385E30.(通常,不必考虑GUID,VB,VC++都会保证在每次运行时生成一个唯一GUID.)
  二进制兼容(Binary compatibility)一定要注意,COM组件符合二进制标准。即不管用什么语言生成COM组件,它都与其他COM组件兼容和可供其他COM组件使用。
 
3.COM利与弊
  COM的好处:COM组件易替换、COM组件适合于改变业务需求、COM组件使复用性成为可能、COM组件有助于并行开发
  COM的局限性:COM组件版本令人头疼、就接口应当停用、COM接口需要认真规划
4.COM组件与接口
  没有接口,COM组件就毫无用处。接口定义其他软件和组件能利用的公用功能。通常,规划组件时,首先要设计接口。这很重要,因为组件之间的交互是建立基于组件的应用程序是最复杂的工作。要花时间规划和定义所有接口,使组件提供其他部分需要的所有功能。
5.何为接口
  COM接口使应用程序和其他组件可以和COM组件的功能进行通信。组件功能通过虚拟函数表(virtual function table)访问,也称vtable或VTBL.vtable不包含实际函数,只是包含组件函数的一组指针。组件要访问其他组件的功能时,要通过这个vtable。
  客户机不能直接访问vtable。另一指针叫接口指针(interface pointer),增加了与接口的另一层间接。使这个接口得以实现。即客户机见到vtable表中指针的指针。
  COM接口的vtable唯一要求是表的第一个字段应为IUnknown的指针。IUnknown是任何组件变成COM组件必须实现的唯一接口,它是所有接口的大门,因为所有其他接口都从IUnknown接口继承而来。
  要了解COM接口如何工作,就要看看COM的调用规则。对象的方法还有一个参数:它属于对象。这个自参数在VB中成为Me,在VC++中成为this。任何接口操作的自参数都被传递给接口指针,指针在传递给vtable。传递参数使COM接口中的操作可以显示调用规则的真实特征。
  COM组件可以包含任意多个接口的实现方法。整个实现方法可以使一个类,但也可以不这样。由于组件可以包含多各类,这些类可以实例化多种类型的多个对象。对象是这些类的活实例。对象能集中提供组件接口的实现方法。
Posted on 2006-07-29 04:31  李通通  阅读(869)  评论(1编辑  收藏  举报