2010-04-14 42 views
35

我有一個C++項目。我承認我是一個完整的C++中的ZERO。但仍然需要編寫一個C++ .net包裝器,以便可以使用它的非託管C++庫。所以我有: 1)非託管項目的頭文件。 2)非託管項目的庫(.dll和.lib的) 3)一個空的C++ .NET項目,我打算用它作爲我的c#應用程序的包裝創建簡單的C++ .net包裝。一步一步

我該如何啓動?我甚至不知道如何設置對非託管庫的引用。

S.O.S.

+13

+1對於聽起來絕望和無知,因爲我在完全相同的情況下:) – 2014-09-11 09:24:43

回答

35

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

這是一般方向。您需要創建C++/CLI類庫項目,添加.NET類(本例中爲StudentWrapper),創建非託管類實例作爲託管類成員,幷包裝每個非託管類函數。使用鏈接器依賴項列表將非託管庫添加到C++/CLI項目中,而不是作爲參考。在項目 - 屬性 - 鏈接器打開附加依賴項並在其中添加.lib名稱。

注意:因爲我們正在討論C++/CLI包裝器,所以沒有PInvoke! PInvoke用於調用導出的函數(API),而不是類。

+5

C++/CLI實際上是隱式的P/Invoke,所以它仍然是P/Invoke。 http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx,你也可以使用P/Invoke來調用C++類,只需要做一些額外的工作。 – xInterop 2013-04-23 03:47:41

+0

這裏是另一篇關於[codeproject(link)]的文章(http://www.codeproject.com/Articles/651516/Exposing-native-to-managed-Cplusplus-CLI-vs-P-Invo)。介紹P/Invoke和C++/CLI。信貸到 Shmuel Zang。 – 2016-07-07 17:28:40

8

您需要使用.NET中的p/invoke來與您的非託管DLL進行通信。

實質上,您可以爲每個要在非託管DLL中調用的函數創建一個函數頭,並告訴.NET函數所在的DLL,然後在.NET包裝器中像調用其他任何函數一樣調用該函數。

只要知道非託管DLL中函數的函數定義和正確的數據類型,您甚至不需要任何C++知識。

+1

鏈接似乎到今天爲止 – qbolec 2017-12-11 08:22:39