2009-09-26 23 views

回答

5

有在C++/CLI相關的管理代碼生成三種不同的compiler switches

/clr:pure使得編譯器產生MSIL代碼。不允許非託管函數(一切都編譯爲MSIL)。這種模式類似於unsafe C#代碼。在這種模式下,您可以使用CRT,並提供純粹的MSIL版本。在此模式下編譯的程序集不能用於需要可驗證代碼的部分信任環境中(例如某些SQL Server託管的程序集)。

/clr:safe使編譯器生成可驗證的MSIL代碼,類似於C#編譯器。不允許C++互操作。您可以在安全策略強制執行可驗證性的部分信任環境中運行/clr:safe程序集。

/clr生成混合程序集。該二進制文件將包含MSIL代碼和本機代碼。他們不是混在一起說一個班。託管部分和非託管部分是分開的,編譯器會根據需要生成代碼以在兩部分之間交互和編組數據。

要直接回答你的問題,沒有執行特定的「轉換」。在puresafe模式下,非託管代碼是不允許的。在允許的地方,託管的東西被編譯到MSIL,非託管的東西被編譯成機器碼。它們之間的任何互操作都需要編譯器生成代碼。那裏沒有魔法。它只是隱藏了程序員的一些互操作性的東西,但代碼仍然存在。