c++-cli - c++/cli 如何在内部与非托管部分一起工作?

标签 c++-cli

它是如何工作的?它是否有不同的部分 - 有些方法是托管的,有些是非托管的,它是否将每个方法都转换为托管的,试图保持所有东西都处于托管状态并在必须时进行互操作调用?

最佳答案

三种不同的compiler switches与 C++/CLI 中的托管代码生成相关:
/clr:pure使编译器生成 MSIL 代码。不允许使用非托管函数(所有内容都编译为 MSIL)。这种模式类似于unsafe C# 代码。在这种模式下,您可以使用 CRT,那里有一个可用的纯 MSIL 版本。在这种模式下编译的程序集不能用于需要可验证代码的部分信任环境(例如某些 SQL Server 托管程序集)。
/clr:safe使编译器生成可验证的 MSIL 代码,类似于 C# 编译器。不允许 C++ 互操作。您可以运行 /clr:safe可验证性由安全策略强制执行的部分信任环境中的程序集。
/clr生成混合程序集。二进制文件将包含 MSIL 代码和 native 代码。他们不是混合在一起说,一个单一的类。托管和非托管部分是分开的,编译器将根据需要生成代码以在两个部分之间互操作和编码数据。

要直接回答您的问题,不执行特定的“转换”。 pure 中根本不允许使用非托管代码和 safe模式。在允许的情况下,托管的东西被编译成 MSIL,非托管的东西被编译成机器代码。它们之间的任何互操作都需要编译器生成代码。那里没有魔法。它只是对程序员隐藏了一些互操作的东西,但代码仍然存在。

关于c++-cli - c++/cli 如何在内部与非托管部分一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482109/

相关文章:

c# - .NET 包装器到 C++ 代码 : CS0122 is inaccessible due to its protection level error

.net - 所有标准 C++ 功能都适用于 C++/CLI 吗?

c++ - 如何将托管值类型成员添加到非托管类?

c# - Visual Studio 2015 编译错误 : CS0570 is not supported by the language

c# - C# 中的字符串和 C++/CLI 中的字符串^...如何传递 "null"?

c# - 将 C++ 对象传递给 C#

.net - C++/CLI : inherit from one CLR class, 多个 C++ 类

c# - 如何在同一解决方案中从 C++/CLi 项目引用 C# 项目

windows - 在 C++ 中模拟 Alt Tab 键盘按下以启动 Fast Switch 窗口

c# - 自定义msiexec进度条?