COM Interop 介绍

更新:2007 年 11 月

组件对象模型 (COM) 允许对象向其他组件和主机应用程序公开其功能。虽然多年来 COM 对象一直是 Windows 编程的基础,但为公共语言运行库 (CLR) 设计的应用程序却有许多优点。

.NET Framework 应用程序将最终取代那些用 COM 开发的应用程序。到那时,您必须通过 Visual Studio 来使用或创建 COM 对象。与 COM 的互操作(也称“COM 互操作”)使您可以按自己的步调向 .NET Framework 过渡,同时继续使用现有的 COM 对象。

使用 .NET Framework 创建 COM 组件,您可以使用免注册的 COM 互操作。这使您可以在计算机上安装了多个 DLL 版本时控制启用哪一个版本,并允许最终用户使用 XCOPY 或 FTP 将您的应用程序复制到他们计算机上的相应目录以便运行您的应用程序。有关更多信息,请参见 免注册 COM 互操作

托管代码和数据

为 .NET Framework 开发的代码称为“托管代码”,它包含 CLR 所使用的元数据。.NET Framework 应用程序使用的数据称为“托管数据”,这是因为运行库管理与数据有关的任务,比如分配和回收内存以及执行类型检查。默认情况下,Visual Basic 2005 使用托管代码和数据,但使用互操作程序集也可以访问 COM 对象的非托管代码和数据(在本页的后面部分介绍)。

程序集

程序集是 .NET Framework 应用程序的主要构造块。它是一个功能的集合,并作为单个实现单元(包含一个或多个文件)来建立、进行版本控制和部署。每一个程序集包含一个程序集清单。

类型库和程序集清单

类型库描述 COM 对象的特征,比如成员名和数据类型。程序集清单对 .NET Framework 应用程序执行同样的功能。它们包含以下信息:

  • 程序集标识、版本、区域性和数字签名。

  • 组成程序集实现的文件。

  • 组成程序集的类型和资源。这包括从程序集导出的类型和资源。

  • 对其他程序集的编译时依赖项。

  • 正确运行程序集所需的权限。

有关程序集和程序集清单的更多信息,请参见程序集

导入和导出类型库

Visual Studio 中包含一个实用工具 Tlbimp,它允许您将信息从类型库导入到 .NET Framework 应用程序中。使用 Tlbexp 实用工具可以从程序集生成类型库。

有关 Tlbimp 和 Tlbexp 的信息,请参见类型库导入程序 (Tlbimp.exe)类型库导出程序 (Tlbexp.exe)

互操作程序集

互操作程序集是 .NET Framework 程序集,它们通过将 COM 对象成员映射到等效的 .NET Framework 托管成员,在托管代码和非托管代码之间起到桥梁作用。由 Visual Basic 2005 创建的互操作程序集处理 COM 对象使用中的许多细节,比如互操作性封送处理。

互操作性封送处理

不管所用的编程语言是什么,所有 .NET Framework 应用程序都共享一组公共类型,这些公共类型允许对象间进行互操作。COM 对象的参数和返回值使用的数据类型有时会与托管代码中的有所不同。“互操作性封送处理”是一个打包过程,它在参数和返回值移入或移出 COM 对象时将这些参数和返回值打包为等效的数据类型。有关更多信息,请参见 Interop 封送处理概述

请参见

任务

演练:用 COM 对象实现继承

互操作性疑难解答

概念

程序集

Interop 封送处理概述

参考

类型库导入程序 (Tlbimp.exe)

类型库导出程序 (Tlbexp.exe)

其他资源

COM 互操作

与非托管代码交互操作

免注册 COM 互操作