COM 构件概述

1. COM 概述

Component Object Model(COM) 是微软开发的一种构件对象模型,用于实现应用程序之间的互操作。

1.1 来源与目的

  • 源于 OLE(Object Link and Embedding)
  • 目的:提高应用程序的可定制性和灵活性,使应用程序更易于定制和扩展。

1.2 核心概念

  • 构件:偏向抽象的概念,是可复用的软件单元。
  • 对象:偏向实现的概念,是构件的具体实现。
  • 接口:COM 的核心内容,定义了构件之间的通信机制,独立于编程语言和操作系统。

2. COM 的结构

COM 包含两部分:

  • 规范部分:定义构件之间的通信机制,不依赖于特定语言或操作系统。
  • 实现部分:由 COM 库(如 OLE32.DLL 和 OLE32.LIB)提供核心服务。

3. COM 构件的发布形式

  • 以 DLL 或 EXE 形式发布,可以透明地在网络上重新分配,支持升级。
  • 一个构件可以由多个类实现,一个类可以实现多个接口。

4. COM 构件标识符

  • 使用 全局唯一标识符(GUID),由 128 位组成,用于唯一标识构件、类和接口。
  • 工具:使用 UUIDGEN.EXE 或 GUIDGEN.EXE 生成 GUID。

5. Windows 注册表

  • COM 构件在 Windows 中通过注册表进行管理,使用 REGEDIT.EXE 或 REGSVR32.EXE 进行注册。
  • 注册表包含硬件、软件配置和用户信息,以层次结构组织。

6. COM 接口

  • 接口是 COM 的核心,定义了构件之间的通信机制。
  • 接口采用 MIDL(Microsoft Interface Definition Language) 进行描述。
  • 接口的内存结构为二进制标准,包含虚拟函数表(vtable),客户端通过指针访问接口。

7. IUnknown 接口

  • 所有 COM 接口都继承自 IUnknown 接口。
  • 提供三个关键功能:
    • QueryInterface:查询构件是否支持某个特定接口。
    • AddRef:增加引用计数,控制构件的生命周期。
    • Release:减少引用计数,当引用计数为零时,构件被删除。

8. 类厂(Class Factory)

  • 能够创建其他构件的构件,本身也是一个 COM 对象。
  • 每个 COM 对象类应该有一个相应的类厂对象。

9. COM 构件运行环境

  • 构件、客户端程序、数据库和类厂都依赖于 COM 库。
  • 运行环境还包括 MTS(Microsoft Transaction Server) 和 MSMQ(Microsoft Message Queue) 等服务。

10. 思考题

  • 什么是 COM?
  • COM 规范是指什么?
  • 什么是 COM 实现?