2009-11-20 60 views
1

我想你不能簡單地用C++/CLI編譯器編譯C++應用程序。我想知道這是否會很困難。有沒有人試過這個,如果是的話:是否需要進行很多修改?將C++移植到C++/CLI很困難嗎?

+0

可能的重複:http://stackoverflow.com/questions/704388/please-describe-you-experience-of-using-microsoft-c-cli – 2009-11-20 14:29:20

+0

@Kirill - 錯誤...沒有。差遠了。 – 2009-11-20 14:41:13

回答

5

這種情況有點像將C編譯爲C++。大多數C將會以C++的形式編譯,但是與你想象中的C++相比,它有很長的路要走,所以很可能在你使用它之前,你會想修改它(通常很多)。同樣,大多數C++都會編譯爲C++/CLI,但有可能你不希望這樣使用它。

2

這對幾乎任何本地C++代碼都適用。它將像託管代碼一樣被轉換爲IL,並在運行時獲得JIT編譯。您可以自由調用託管代碼,這要感謝C++ interop。我知道無法編譯的唯一非託管代碼構造是__fastcall關鍵字。 const關鍵字存在一個問題,它不完全用屬性模擬,但這只是導入元數據時的一個問題。只需像現在一樣繼續使用頭文件即可。

.NET程序集能夠存儲機器代碼以及IL。如果編譯器遇到問題或者懷疑生成的代碼不是最優的時候,您可以通過選擇性地關閉IL代來利用此優勢。用包裹的#pragma代碼:

#pragma managed(push,off) 
void CompiledToMachineCode() { 
    // etc.. 
} 
#pragma managed(pop) 

您還需要你的時候是#包括了不使用/ CLR編譯選項單獨編譯的.libs頭使用此#pragma。