混合(本机和托管)程序集

混合程序集能够同时包含非托管计算机指令和 MSIL 指令。 这样,它们就可以调用 .NET 组件以及由这些组件调用,同时与本机 C++ 库保持兼容。 通过使用混合程序集,开发人员可以混合使用 .NET 和本机 C++ 代码来编写应用程序。

例如,只需通过使用 /clr 编译器开关重新编译一个模块,即可将完全由本机 C++ 代码组成的现有库引入到 .NET 平台。 然后,此模块能够使用 .NET 功能,同时能与应用程序的其余部分保持兼容。 甚至可以在同一个文件中根据每个函数决定是进行托管编译还是本机编译(请参阅 managed、unmanaged)。

Visual C++ 仅支持使用 /clr 编译器选项生成混合托管程序集。 “/clr:pure”和“/clr:safe”编译器选项在 Visual Studio 2015 中已弃用,并且在 Visual Studio 2017 中不受支持。 如果需要纯托管程序集或可验证的托管程序集,建议使用 C# 创建它们。

早期版本的 Microsoft C++ 编译器工具集支持生成三种不同类型的的托管程序集:混合托管程序集、纯托管程序集和可验证的托管程序集。 纯代码和可验证代码 (C++/CLI) 中介绍了后两者。

本部分内容

如何:迁移到 /clr
描述在应用程序中引入或升级 .NET 功能的建议步骤。

如何:使用 /clr 编译 MFC 和 ATL 代码
讨论如何编译现有的 MFC 和 ATL 程序以面向公共语言运行时。

混合程序集的初始化
描述“加载程序锁定”问题和解决方案。

混合程序集的库支持
讨论如何在 /clr 编译中使用本机库

性能注意事项
描述混合程序集和数据封送的性能影响。

应用程序域和 Visual C++
讨论对应用程序域的 Visual C++ 支持。

双重形式转换
讨论托管函数的本机入口点的性能影响。

使用以 /clr 生成的 COM 对象时避免 CLR 关闭异常
讨论如何确保正确关闭使用以 /clr 生成的 COM 对象的托管应用程序

如何:通过移除 CRT 库 DLL 上的依赖项来创建部分受信任的应用程序
讨论如何通过删除对 msvcm90.dll 的依赖来创建使用 Visual C++ 的部分信任的公共语言运行时应用程序。

若要详细了解混合程序集的编码指南,请参阅托管/非托管代码互操作性的概述

另请参阅