将类型库当作程序集导入

更新:2007 年 11 月

COM 类型定义通常位于类型库中。而符合 CLS 的编译器则在程序集中生成类型元数据。类型信息的这两种来源具有很大的区别。

说明:

如果可用,应始终使用要集成到托管代码中的 COM 组件的作者所发布的主 Interop 程序集。主 Interop 程序集中的类型已为您导入,可以从托管代码中激活和调用。有关生成和使用主 Interop 程序集的详细信息,请参见主 Interop 程序集

本主题将说明从类型库中生成元数据的方法。结果程序集称作 Interop 程序集。

生成元数据

COM 类型库可以是独立的 TLB 文件,如 Loanlib.tlb。某些类型库嵌入在 DLL 或 EXE 文件的资源部分。类型库信息的其他来源包括 OLB 和 OCX 文件。

找到包含目标 COM 类型实现的类型库后,可以通过下列选项来生成包含类型元数据的 Interop 程序集:

  • Visual Studio 2005

    Visual Studio 2005 自动将类型库中的 COM 类型转换为程序集中的元数据。有关说明,请参见如何:添加对类型库的引用

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

    类型库导入程序提供命令行选项,用以调整结果 Interop 文件中的元数据、从现有类型库中导入类型以及生成 Interop 程序集和命名空间。有关说明,请参见如何:从类型库生成 Interop 程序集

  • TypeLibConverter

    TypeLibConverter 类(位于 System.Runtime.InteropServices 命名空间中)提供了将类型库中的 coclass 和接口转换为程序集中的元数据的方法。此 API 将生成与 Tlbimp.exe 相同的元数据输出。不过,与 Tlbimp.exe 不同的是,TypeLibConverter 类可以将内存中的类型库转换为元数据。

  • 自定义包装

    当类型库不可用或不正确时,一种可选的做法是在托管源代码中创建类或接口的重复定义。然后,用面向运行库的编译器来编译源代码以生成程序集中的元数据。

    要手动定义 COM 类型,必须具备下列各项:

    • 所定义的 coclass 和接口的精确描述。

    • 可生成正确 .NET Framework 类定义的编译器,如 C# 编译器。

    • 有关类型库到程序集转换规则的知识。

    编写自定义包装是一种较少使用的高级技术。有关生成自定义包装的其他信息,请参见自定义标准包装

有关 COM 互操作导入过程的详细信息,请参见有关从类型库转换到程序集的摘要

请参见

任务

如何:添加对类型库的引用

如何:从类型库生成 Interop 程序集

概念

向 .NET Framework 公开 COM 组件

自定义标准包装

在托管代码中使用 COM 类型

编译 Interop 项目

部署 Interop 应用程序

参考

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

TypeLibConverter

其他资源

有关从类型库转换到程序集的摘要