软件重用是业界追求的目标,人们一直希望能够像搭积木一样随意―装配‖应用程序,组件对象就充当了积木的角色
所谓组件对象,实际上就是预定义好的、能完成一定功能的服务或接口
问题是,这些组件对象如何与应用程序、如何与其他组件对象共存并相互通信和交互
这就需要制定
个规范,让这些组件对象按统一的标准方式工作
COM 是个二进制规范,它与源代码无关
这样,即使COM 对象由不同的编程语言创建,运行在不同的进程空间和不同的操作系统平台,这些对象也能相互通信
COM 既是规范,也是实现,它以 COM 库(OLE32
dll 和贴 OLEAut32
dll)的形式提供了访问 COM 对象核心功能的标准接口以及一组API 函数,这些 API函数用于创建和管理 COM 对象
COM 本质上仍然是客户服务器模式
客户(通常是应用程序)请求创建 COM 对象并通过 COM 对象的接口操纵 COM 对象
服务器根据客户的请求创建并管理COM 对象
客户和服务器这两种角色并不是绝对的
组件对象与一般意义上的对象既相似也有区别
一般意义上的对象是一种把数据和操纵数据的方法封装在一起的数据类型的实例,而组件对象则使用接口(Interface)而不是方法来描述自己并提供服务
所谓接口,其精确定义是―基于对象的一组语义上相关的功能‖,实际上是一个纯虚类,真正实现接口的是接口对象)(Interface Object)
一个 COM 对象可以只有一个接口,例如 Wndows 95/98 外壳扩展;也可以有许多接口,例如 ActiveX 控件一般就有多个接口,客户可以从很多方面来操纵 ActiveX 控件
接口是客户与服务器通信的唯一途径
如果一个组件对象有多个接口,则通过一个接口不能直接访问其他接口
但是,COM允许客户调用COM 库中的QueryInterface()去查询组件对象所支持的其他接口