它是如何工作的?它是否有不同的部分 - 一些方法是托管的,一些是非托管的,是否将每个方法转换为托管,试图保持一切管理并在必要时进行互操作调用?
答案 0 :(得分:5)
与C ++ / CLI中的托管代码生成有三种不同的compiler switches:
/clr:pure
使编译器生成MSIL代码。不允许任何非托管函数(一切都编译为MSIL)。此模式类似于unsafe
C#代码。在这种模式下,您可以使用CRT,它有一个纯MSIL版本。以此模式编译的程序集不能用于需要可验证代码的部分信任环境(例如某些SQL Server托管程序集)。
/clr:safe
使编译器生成可验证的MSIL代码,类似于C#编译器。不允许C ++互操作。您可以在安全策略强制执行可验证性的部分信任环境中运行/clr:safe
程序集。
/clr
生成混合程序集。二进制文件将包含MSIL代码和本机代码。他们并没有混合在一起,比如一个班级。托管和非托管部分是分开的,编译器将生成代码以根据需要在两个部分之间进行互操作和编组数据。
要直接回答您的问题,请勿执行特定的“转化”。在pure
和safe
模式下,根本不允许使用非托管代码。在允许的地方,托管的东西被编译成MSIL,非托管的东西被编译成机器代码。它们之间的任何互操作都需要编译器生成代码。那里没有魔力。它只是隐藏了程序员的一些互操作性,但代码仍然存在。