簡體   English   中英

Win32控制台應用程序與CLR控制台應用程序

[英]Win32 Console app vs. CLR Console app

我正在從事一個我不打算使用.NET庫或工具開發或部署的C ++項目,這意味着使用Visual Studio Win32 Console應用程序創建它對我來說很有意義。 但是,我聽說在Visual Studio中使用CLR應用程序時的調試功能要強大得多。 所以我有幾個問題:

  1. 的確,即使您不使用任何.NET庫或其他資源,擁有CLR應用程序還是Win32應用程序也會在您的開發過程中添加功能嗎?

  2. 如果是這樣,即使我將使用STL等開發純C ++項目並且不利用任何.NET功能,我仍然能夠將項目開發/編譯為CLR項目來利用這些優勢嗎? 還是這樣的項目需要基本的差異,以使其變得不平凡,這意味着我應該堅持使用Win32控制台應用程序?

底線答案是,如果您從不打算在應用程序中使用CLR或任何.Net對象,則只需使用普通的Win32 C ++庫即可。 做其他任何事情都會使您痛苦不堪。

現在,要回答有關調試的原始問題,可以,使用CLR進行調試比調試普通的C ++應用程序具有某些優勢。 從Visual Studio 2005開始,C#和VB.Net都開始致力於使變量在locals / autos / watch窗口中的顯示更加有價值。 它主要是通過引入.Net屬性(例如DebuggerDisplay,DebuggerTypeProxy和visualizer框架)來完成的。

如果您不使用任何.Net類型,您將不會獲得這些好處。

C ++表達式評估程序沒有利用任何這些優勢。 它具有自己的自定義類型顯示的方法。 但是它不像屬性樣式那樣功能豐富(或潛在危險),因為它不允許代碼在被調試進程中運行。

這並不是說調試C ++會帶來糟糕的體驗。 它只是有所不同,並且對於許多STL容器類型都有更好的顯示。

調試CLR應用程序也有某些缺點。 例如,有時調試優化的代碼幾乎是不可能的,因為JITer會隱藏局部變量,參數以及通常的“ this”。 調試類似構造的C ++應用程序也可能令人沮喪,但是您始終可以不費吹灰之力地查看這些寄存器,以了解發生了什么情況。 對CLR應用程序執行相同的操作最多是困難的。

我認為將本機C ++代碼編譯為CLR會使蠕蟲泛濫成災。 除非您對現有的C ++代碼進行大量投資,並且有必要使用托管類型運行該代碼,否則您要避免這樣做。

例如,C ++ / CLI是將本機C ++代碼直接捆綁到CLR程序集中的一種方法,但是C ++ / CLI在C ++語言中添加了非標准語法,並且使用本機C ++類型與托管類型混合似乎是一個非常棘手的問題至少。

因此,總而言之,我只是將其保留為本地應用程序。 如果您有任何將其移植到CLR的計划,並且剛剛開始從事此項目,那么我會認真考慮開始使用CLR之類的CLR本機語言編寫。

此答案從此處復制-http: //social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-和Win32控制台應用程序

CLR控制台應用程序和win32控制台應用程序有什么區別? -前者使用公共語言運行庫(即.NET框架); 后者沒有。

而且我無法在win32控制台應用程序模型下使用名稱空間System。 -系統名稱空間是.NET框架的一部分。

我想使用名稱空間時該怎么辦? -您應該編寫一個.NET應用程序。

並且沒有C#模型中的輸入提示嗎? -在Visual Studio的現有版本中,確實沒有IntelliSense for C ++ / CLI。 如果您需要.NET應用程序,則C#可能是更好的語言選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM