用于在 C# 托管代码和非托管代码之间进行互操作的工具和技术包括平台调用服务以及 .NET Framework 和 COM 互操作性工具。

平台调用

平台调用将非托管代码作为导出函数进行定位和调用。它还根据需要封送调用的参数,如输入和输出参数、整型、字符串、数组和结构等。有关更多信息,请参见用平台调用封送数据使用非托管 DLL 函数

Note注意

公共语言运行库 (CLR) 管理对系统资源的访问。在 CLR 外调用非托管代码会避开此安全机制,因此会造成安全风险。例如,非托管代码可能避开 CLR 安全机制,直接调用非托管代码中的资源。有关更多信息,请参见“.NET Framework Security”(.NET Framework 安全性)

.NET Framework 和 COM 之间的互操作性工具

  • 若要从托管代码中调用 COM API,请使用类型库导入程序 (Tlbimp.exe),它以类型库作为输入,并输出 .NET Framework 程序集和关联托管元数据。然后,可以将此生成的 .NET Framework 程序集作为项目引用添加到 Visual Studio 项目中。例如,使用 TlbImp comlibrary.dll /out: comlnetibrary.dll 并在项目中添加对 comlnetibrary.dll 的引用。有关更多信息,请参见将类型库当作程序集导入和位于 “Calling COM Components from .NET Clients”(从 .NET 客户端调用 COM 组件)

  • 若要从 COM 调用托管代码,请使用类型库导出程序 (Tlbexp.exe),它以托管的程序集作为输入,生成一个类型库,其中包含该程序集所定义的全部 public 类型的 COM 定义。

  • 若要从 COM 客户端调用托管组件,请使用程序集注册工具 (Regasm.exe),它读取 .NET Framework 程序集中的元数据并添加注册表项,以便 COM 客户端创建托管类。

  • 若要调用 ActiveX 控件,请使用 Windows 窗体 ActiveX 控件导入程序 (Aximp.exe),它以 ActiveX 控件的类型库作为输入,生成的包装控件允许控件寄宿在 Windows 窗体中。例如,Aximp activex.ocx 创建两个文件:viz.activex.dlAxactivex.dll。当项目引用自动生成的 Axactivex.dll 时,可以使用这两个文件。

Note注意

若要使用上述工具(如为 COMinterop 注册托管程序集),您必须具有管理员或超级用户安全权限。有关更多信息,请参见“.NET Framework Security”(.NET Framework 安全性)

互操作性示例和技术

请参见

概念

C# 编程指南
自定义封送处理概述

其他资源

用 COM Interop 对数据进行封送处理
.NET Compact Framework 中的互操作性
互操作封送处理