定义 COM 接口

Microsoft 定义许多 COM 接口。 在大多数情况下,可以重用这些通用接口。 但是,某些应用程序具有特定的要求,从而希望或需要定义自己的对象接口。

所有 COM 接口都必须直接或间接地派生自 IUnknown 接口。 在该约束中,自定义接口几乎可以支持任何方法或参数,包括异步方法。 还可以为自定义接口生成类型库,以便客户端可以在运行时访问有关对象方法的信息。 定义接口后,采用 Microsoft 接口定义语言 (MIDL) 中对其进行描述,编译并注册该接口,以及就像任何通用接口一样使用该接口。 使用分布式 COM,接口方法既可用于远程进程,也可用于同一计算机上的其他进程。

最后,生成 COM 接口需要一个开发环境,其中包括 C/C++ 编译器和 Midl.exe 编译器。

创建 COM 接口的步骤如下所示:

  • 决定如何为接口提供封送支持;使用类型库驱动的封送或代理/存根 DLL。 即使要在单元边界之间使用进程内接口,也必须封送这些接口。 最好在每个 COM 接口中构建封送支持,即使认为不需要也是如此。 有关详细信息,请参阅接口封送
  • 描述接口定义 (IDL) 文件中的接口。 此外,还可以在应用程序配置文件 (ACF) 中指定接口的某些本地方面。 如果使用类型库驱动的封送,请添加一个引用要为其生成类型信息的接口的 library 语句。
  • 使用 MIDL 编译器生成类型库文件和标头文件,或 C 语言代理/存根文件、接口标识符文件、DLL 数据文件和标头文件。 有关详细信息,请参阅 MIDL 编译
  • 根据所选封送方法,编写模块定义 (DEF) 文件,编译所有 MIDL 生成的文件并将其链接到单个代理 DLL,以及在系统注册表中注册接口,或注册类型库。 有关详细信息,请参阅加载和注册类型库生成和注册代理 DLL

IDL 文件剖析

COM 客户端和服务器

接口设计规则

组件对象模型