2011-08-15 30 views
0

我正在使用C++,並發現有不同種類的C++,如CLR,Win32,MFC ....C++ CLR win32或其他?

此外,我發現某些C++庫cab會在其他一些C#程序中調用。怎麼會這樣?因爲它相信C++比C#更快,因爲它不需要一個平臺來運行它,但是,如果在CLR中使用C++,它會變慢,因爲需要.Net框架嗎?

現在的問題是: 我想製作一個調用Windows命令並返回輸出的C++庫,並且可以在其他C#程序中調用此庫。是否有可能這樣做?如果是,C++庫是否需要.Net框架並且運行速度較慢?

回答

5

你的困惑是可以理解的,但你的理解是有缺陷的。

C++和使用MFC之間沒有區別,MFC是用C++編寫的類框架,就像您可能用C++編寫的任何其他代碼一樣。這只是微軟提供的產品框架。

C++/CLI(不是CLR)實際上不是C++。它是一種類似C++的語言,編譯爲.net IL字節碼。它有很多限制,並且具有與C#和VB.NET以及其他.NET語言一樣的限制。它與C++非常相似,但不完全相同。

C++/CLI應用程序編譯爲.net IL字節碼,因此它們與C#應用程序沒有區別。實際上,幾乎所有基於.net的語言都會編譯成相同的字節碼,並使用相同的框架。

C#或C++/CLI程序是否「較慢」並不那麼明確。所有太多的C++熱情使得託管代碼很慢的神話永遠存在。不是。有些東西很慢,比如第一次運行它(它需要按需編譯代碼),但是因爲.NET Jitter(即時編譯器)可以優化它運行的平臺的代碼,所以它使代碼表現更好。

當然託管代碼也有垃圾回收,這很方便,但在某些情況下可能會導致性能問題。但是,這不是每一種情況,甚至大多數情況都不是。

+0

很好的答案。是的,我一直都對CLR和CLI感到困惑:) –

+0

但是當我打開一個新項目時,visual studio中的選項顯示名稱爲「CLR Empty Project」和「CLR Console Application」 – user883434

+0

@ user883434 - 並且?我不確定你的意思。不同的項目只是給你一個開始的地方,它們不是不同種類的C++。 –

2

是的,這是可能的。

如果您使用C++/CLI,您可以將程序集包含在C#項目中,並像通常的C#代碼那樣調用函數。如果你使用非CLI C++編寫它(Win32和MFC不是C++的種類,它們只是庫......),那麼你必須使用C#中的P/Invoke來調用用C++編寫的函數。

是的,C++/CLI可能比vanilla C++慢一些。但不是太多。 CLR非常快。