2013-01-06 81 views
1

不久前我學到了C++/CLI是使用非託管C++代碼的方法。我能夠弄清楚如何在C++代碼處於靜態庫中的情況下在C++/CLI項目中調用C++項目中的代碼。 C++代碼位於靜態庫中,C++/CLI代碼位於Win32應用程序中。如何在Visual Studio中使用C++/CLI和C#調用C++/CLI?

然後,我想將C++/CLI項目轉換成一個靜態庫(現在稱爲包裝器),並創建另一個「消費者」項目(C++/CLI或C#)來調用包裝器。這是我卡住的地方。

在C#中,連接項目非常簡單。您所需要的只是將消費者項目的引用添加到庫項目中。你如何從C++/CLI或C#項目到C++/CLI項目?

好的,所以這是主要問題。我的最終目標是能夠自由地從C#到C++/CLI到C++,無論是使用DLL還是靜態庫,但我必須先解決當前的問題。

回答

3

在C#中,您無法添加對C++/CLI靜態庫(.lib)的引用,因爲.libs是C++特有的。相反,您需要創建C++/CLI項目作爲編譯爲.NET程序集(DLL)的類庫項目。生成的DLL可以作爲C#項目的參考添加。

還有一件事,我不推薦使用C++/CLI爲非託管C++類創建包裝。在這些情況下,最好將類轉換爲COM類(使用ATL)。由於.NET與COM是向後兼容的,COM類可以直接從C#使用,而不需要創建任何包裝器。當你需要在同一個地方混合託管代碼和非託管代碼時,C++/CLI非常有用,但是每當你發現自己創建包裝器時,就應該考慮使用COM代替。

相關問題