在托管代码中使用 COM 类型
在程序集中定义的 COM 类型与其他任何托管类型类似。 托管客户端可以按常规方式创建 COM 类型的新实例,然后通过元数据获取类信息,就像处理其他任何托管类一样。 与其他任何托管类相同,可以通过对象查看器检查方法语法或使用反射来获取方法语法。 当 COM 对象返回失败 HRESULT 时,.NET Framework 客户端将捕捉相应的异常。
可以通过以下两种方式,在应用程序中包括可用来与 COM 类型进行互操作的类型信息:
使用嵌入的互操作类型:从 .NET Framework 4 版开始,您可以指示编译器将互操作程序集中的类型信息嵌入到可执行文件中。 编译器只嵌入您的应用程序所使用的类型信息。 无需将互操作程序集与您的应用程序一起部署。 这是推荐采用的方法。
部署互操作程序集:您可以创建一个对互操作程序集的标准引用。 在本例中,互操作程序集必须与您的应用程序一起部署。 如果使用此方法,且不使用专用 COM 组件,而是要将某个 COM 组件集成到托管代码中,请始终引用该组件的作者所发布的主互操作程序集 (PIA)。 有关生成和使用主互操作程序集的更多信息,请参见主互操作程序集。
注意 |
---|
当使用嵌入的互操作类型时,您可以从 COM 组件的作者所发布的主互操作程序集中嵌入这些类型。但是,无需将主互操作程序集与您的应用程序一起部署。 |
使用嵌入的互操作类型可减少应用程序的大小,因为大多数应用程序都不会使用 COM 组件的所有功能。 编译器在嵌入类型信息时效率非常高;如果您的应用程序只使用 COM 接口的部分方法,则编译器将不会嵌入未使用的方法。 当具有嵌入的类型信息的应用程序与另一个类似的应用程序交互时,或者与使用主互操作程序集的应用程序交互时,公共语言运行时将使用类型等效规则来确定同名的两个类型是否表示相同的 COM 类型。
获取和释放对运行 COM 对象的引用类似于获取和释放对其他任何运行托管对象的引用。 当 .NET Framework 客户端获取和释放对某个 COM 对象的引用时,运行时将维护该 COM 对象的引用计数,就像任何其他 COM 客户端所做的一样。而且,.NET Framework 客户端可以将该对象视为需要经过垃圾回收来进行相关操作,正如它们针对任何其他托管服务器对象所执行的操作一样。
通过 Visual Studio 可以轻松地将类型信息嵌入到应用程序或外接程序中。 有关示例,请参见演练:嵌入 Microsoft Office 程序集中的类型信息(C# 和 Visual Basic)和演练:嵌入托管程序集中的类型(C# 和 Visual Basic)。
如需随本节主题提供的代码示例,请参见 COM 互操作示例:.NET 客户端和 COM 服务器。
类型等效性和嵌入的互操作类型中对类型等效规则进行了讨论。 不过,您无需了解这些规则即可使用 COM 对象。
请参见
任务
演练:嵌入 Microsoft Office 程序集中的类型信息(C# 和 Visual Basic)
演练:嵌入托管程序集中的类型(C# 和 Visual Basic)