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 实现?