2010-04-04 240 views
2

所以我想在Visual C++中嘗試我的第一個CLR項目。所以我創建了控制檯項目,但是因爲我發現的關於CLR編程的每個教程都使用C#或Windows窗體,我只是嘗試使用iostream編寫標準C++ Hello Word應用程序(我認爲在這種情況下代碼不需要),但我會盡力我有一些編譯錯誤,因爲iostream使用預編譯函數,而CLR應用程序編譯成MSIL。我認爲使用C++的CLR編程意味着只使用C++語法,但對I/O等有不同的功能。所以,基本上,我想問的是,任何本地控制檯C++應用程序都可以編譯爲MSIL並由.NET框架運行?Visual Studio CLR項目

回答

0
can any native console C++ app be compiled into MSIL and run by .NET? 

大多數代碼可以看到http://msdn.microsoft.com/en-us/library/aa712815.aspx作爲例外。

你的應用程序仍然會使用原生代碼思想。還有/ clr:純粹如果你想確保只使用CLR代碼。

+0

好的,所以在這種情況下,編譯器實際上包含cout的機器代碼到CLR的MSIL代碼中? – Vit 2010-04-04 19:40:09

+0

Sorta。它將包含CLR位直接調用的本地代碼。 – sblom 2010-04-04 19:43:36

2

如果您嘗試通過採用包含cout和大量STL的經典C++應用程序並將其編譯爲/clr來嘗試瞭解託管編程,您將會感到沮喪。你應該能夠編譯任何有效的C++應用程序/ clr,但這並不意味着結果是值得的。如果你堅持這樣做 - 一個快速提示 - 關閉預編譯頭。

如果您有某種控制檯應用程序的C#教程,您可以隨時將其轉換爲C++/CLI。 MSDN文檔可以爲你提供幫助,因爲它通常在VB,C#和C++/CLI中有例子,你會很快拿起替換模式。因此,如果您的C#教程的功能爲Console.WriteLine,則您的C++/CLI版本將具有Console::WriteLine。如果C#代碼有Employee e = new Employee(),那麼您的C++/CLI代碼將有Employee^ e = gcnew Employee()等等。這種方法將使您比使用「經典C++」更快地學習C++/CLI,並在稍後嘗試CLR。

也就是說,C++/CLI實際上不適用於編寫控制檯和winforms應用程序。這是爲了互操作。因此,快速轉向編寫可調用大型現有C++庫(包括頭文件,鏈接到lib)的庫,然後使用VB或C#中的一些UI(Windows,Web,wcf,無論),它們使用新的互操作庫來簡化訪問舊C++代碼的功能。如果你沒有這樣做的意圖,你爲什麼學習C++/CLI?

還有C++/CLI書籍 - 我在我的辦公室有幾個。