混合(本机和托管)程序集
混合程序集能够同时包含非托管计算机指令和 MSIL 指令。这使它们可以调用 .NET 组件或被其调用,同时保留与完全非托管组件的兼容性。使用混合程序集,开发人员可以混合使用托管和非托管功能创作应用程序。这使得混合程序集成为将现有 Visual C++ 应用程序迁移到 .NET 平台的理想选择。
例如,通过使用 /clr 编译器开关仅重新编译一个模块,就可将完全由非托管函数组成的现有应用程序迁移到 .NET 平台。然后,此模块就可以使用 .NET 功能,但是仍保留与应用程序的其余部分的兼容性。通过此种方式,应用程序可以按渐近、逐个部分的方式转换到 .NET 平台。甚至可以决定在同一文件内每个函数的基础上进行托管或非托管编译(请参见 managed, unmanaged)。
Visual C++ 支持生成三种不同类型的托管程序集:混合程序集、纯程序集和可验证程序集。后两者在纯代码和可验证代码 (C++/CLI)中讨论。
本节内容
如何:迁移到 /clr
描述在您的应用程序中引入或升级 .NET 功能的建议步骤。如何:使用 /clr 编译 MFC 和 ATL 代码
讨论如何编译现有的 MFC 和 ATL 程序,以面向公共语言运行时。混合程序集的初始化
描述“加载程序锁”问题及其解决方案。混合程序集的库支持
讨论如何在 /clr 编译中使用本机库。互操作的性能注意事项 (C++)
描述混合程序集和数据封送处理的性能含义。应用程序域和 Visual C++
讨论 Visual C++ 对应用程序域的支持。双重 Thunk (C++)
讨论托管函数的本机入口点的性能含义。使用以 /clr 生成的 COM 对象时避免 CLR 关闭异常
讨论如何确保正确关闭使用用 /clr 编译的 COM 对象的托管应用程序。如何:通过移除 CRT 库 DLL 上的依赖项来创建部分受信任的应用程序
讨论如何使用 Visual C++,通过移除 msvcm90.dll 中的依赖项,创建部分受信任的公共语言运行时应用程序。
有关混合程序集的编码准则的更多信息,请参见位于 https://msdn.microsoft.com/zh-cn/netframework/default.aspx?pull=/library/zh-cn/dndotnet/html/manunmancode.asp 的 MSDN 文章“An Overview of Managed/Unmanaged Code Interoperability”(托管/非托管代码互操作性概述)。