2013-11-04 22 views
2

也許這可能是一個dumn問題,但我無法弄清楚這一點。我知道託管代碼和非託管代碼之間的區別,但是我已經獲得了一個C++ .NET解決方案,並且我無法弄清楚C++項目是託管還是非託管。如何判斷Visual Studio 2012中的C++動態庫是託管還是非託管?

我其實不認爲它是託管的。

望着性質,我可以配置的東西像MFC(=使用標準Windows庫),ATL,配置類型(動態庫)的使用用途,...

裝配實際上是圍繞一個包裹非託管C代碼(lib)與一個cpp導出C函數到C#託管代碼。

+0

試圖使用中間語言反彙編程序ildasm來查看程序集內部,它告訴我它沒有有效的CLR。所以它顯然是非託管的... –

回答

4

「被管理的」 C++項目實際上其使用.NET 公共語言運行庫(CLR)C++/CLI項目。這在Visual Studio中用編譯開關中的/clr表示。

有關詳細信息,請參閱MSDN上的/clr (Common Language Runtime Compilation)

還要注意,Microsoft通知您「甚至可以在同一個文件中逐個函數地確定託管編譯和非託管編譯」。有關更多詳細信息,另請參閱MSDN上的Mixed (Native and Managed) Assemblies

+0

好吧,看到它。切換到/ clr看起來很簡單。這樣做時會出現很多錯誤。 –

+1

我並沒有說你可以使用任何有效的C++程序,只需將它扔到微軟並用'/ clr'開關標記它,以便它自動成爲「託管代碼」。在做了一些研究之後,也許你可以單獨詢問關於在嘗試使用'/ clr'時得到的錯誤。 –

+1

@LievenCardoen你簡單地問過*如何判斷Visual Studio 2012中的C++動態庫是否被管理或不受管理?*並且我相信你已經回答了這個問題 –

4

看項目屬性對話框的配置屬性節點。在該部分中有一個名爲Common Language Runtime Support的項目。非託管項目的值爲否通用語言運行時支持,否則該項目將被管理。

此設置對應於/clr編譯器選項。