C++ cli c++/cli是否在内部使用非托管部件?

C++ cli c++/cli是否在内部使用非托管部件?,c++-cli,C++ Cli,它是如何工作的?它有不同的部分吗?有些方法是托管的,有些是非托管的,它是否将每个方法都转换为托管的,尝试保持所有内容都是托管的,并在必要时执行互操作调用?在C++/CLI中,与托管代码生成相关的有三种不同的方法: /clr:pure使编译器生成MSIL代码。不允许使用非托管函数(所有内容都编译为MSIL)。此模式类似于safeC#code。在这种模式下,您可以使用CRT,因为它有一个纯MSIL版本。在此模式下编译的程序集不能用于需要可验证代码的部分信任环境(例如,某些SQL Server托管的程

它是如何工作的?它有不同的部分吗?有些方法是托管的,有些是非托管的,它是否将每个方法都转换为托管的,尝试保持所有内容都是托管的,并在必要时执行互操作调用?

在C++/CLI中,与托管代码生成相关的有三种不同的方法:

/clr:pure
使编译器生成MSIL代码。不允许使用非托管函数(所有内容都编译为MSIL)。此模式类似于
safe
C#code。在这种模式下,您可以使用CRT,因为它有一个纯MSIL版本。在此模式下编译的程序集不能用于需要可验证代码的部分信任环境(例如,某些SQL Server托管的程序集)

/clr:safe
使编译器生成可验证的MSIL代码,类似于C#编译器。不允许C++互操作。您可以在部分信任环境中运行
/clr:safe
程序集,其中可验证性由安全策略强制执行

/clr
生成混合程序集。二进制文件将同时包含MSIL代码和本机代码。他们不是在一个班级里混在一起的。托管部分和非托管部分是分开的,编译器将根据需要生成代码以在两个部分之间互操作和封送数据

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