它是如何工作的?它是否有不同的部分 - 一些方法是管理的,一些是非託管的,是否將每種方法轉換爲管理方式,嘗試保持一切管理並在必要時進行互操作調用?C++/cli如何在非託管部件內部工作?
3
A
回答
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,非託管的東西被編譯成機器碼。它們之間的任何互操作都需要編譯器生成代碼。那裏沒有魔法。它只是隱藏了程序員的一些互操作性的東西,但代碼仍然存在。
相關問題
- 1. 如何在Parse外部託管內容?
- 2. 事件委託如何在Javascript內部工作
- 3. WinRT XAML - 託管和非託管 - 它是如何工作的?
- 4. 託管C++內部類?
- 5. 我如何從託管代碼調用外部非託管應用程序?
- 6. 非託管內存和託管存儲
- 7. 交易不工作,除非內部DAO
- 8. 如何掛鉤託管函數內的非託管函數?
- 9. 剃刀模板委託,內部工作如何?
- 10. 內部工作
- 11. R管道內部連接不工作
- 12. Django管理員作爲內部工具
- 13. jquery插件內部工作
- 14. SQLite遊標如何在內部工作?
- 15. canvas.width = canvas.width如何在內部工作?
- 16. entrySet()如何在HashMap內部工作?
- 17. Viewstate如何在內部工作
- 18. mongodb更新如何在內部工作?
- 19. ContentProvider如何在內部工作
- 20. JVM如何在內部工作
- 21. 'range()'如何在內部工作?
- 22. JS Promises如何在內部工作?
- 23. LinkedList如何在Java內部工作?
- 24. typedef如何在內部工作?
- 25. ant任務如何在內部工作?
- 26. CGContextClipToMask如何在內部工作?
- 27. HibernateTemplate如何在內部工作
- 28. AsQueryable()如何在內部工作?
- 29. DBContext SaveChanges如何在內部工作?
- 30. DISTINCT如何在內部工作?