Windows 编程/COM 和 ActiveX
熟悉 Windows 的人无疑听说过许多不同的术语,例如 COM、DCOM、COM+、ActiveX、OLE 等。这些到底是什么,它们之间有什么关系?
组件对象模型 (COM) 是微软于 1993 年推出的软件组件二进制接口标准。它用于在各种编程语言中启用进程间通信和动态对象创建。COM 这个术语在微软软件开发行业中通常用作一个总称,它涵盖了 OLE、OLE 自动化、ActiveX、COM+ 和 DCOM 技术。COM 本质上为在任何语言中创建的类提供了一个框架,并可以实例化为任何其他语言。一个类可以是用 C++ 编写的,然后从 VisualBasic、C# 等中调用。本质上,COM 定义了所有语言都必须遵循的接口,如果它们想参与 COM 程序。
用可编译语言 (如 C++ 或 VisualBasic) 编写的 COM 类可以编译成 DLL 库。包含 COM 类的 DLL 库与用 C 编写的包含普通 C 函数的 DLL 库不兼容。但是,可以编译 DLL 文件,使其既包含标准 C 函数,也包含 COM 类。
包含 COM 类的文件被称为 "COM 模块" 或 "COM 组件"。就像其他动态链接应用程序一样,只要所有模块都正确使用 COM 规范,Windows 将自动管理组件之间的 COM 接口。
COM 系统依赖于被称为通用唯一识别码 (UUID) 的数字标识符。UUID 是一个 128 位数字,基本上保证在整个世界范围内都是唯一的 COM 标识符。UUID 数字是一个哈希值,它基于主网络卡的 MAC 地址 (如果计算机有的话) 和处理器的实时时钟值。这意味着,生成两个相同的 UUID 的唯一方法是在同一台计算机上的完全相同的时间生成这两个 UUID。谢天谢地,这是不可能做到的。
COM 组件被赋予一个 UUID 号码,以便它们可以与所有其他 COM 组件区分开来,并且任何给定的 COM 模块都可以通过一个唯一的数字标识符来识别。