1. 程式人生 > >C#呼叫非託管C++DLL的兩種方法

C#呼叫非託管C++DLL的兩種方法



C#編寫的程式碼屬於跨平臺的託管程式碼,C++語言可以編寫託管(managed)和非託管(native)程式碼。在C#C++的混合程式設計中,經常會使用C#來呼叫native C++DLL,下面有兩種常用的呼叫方法供大家參考。

  1. 使用P/Invoke直接呼叫native C++ Dll裡面的函式。(注:此方法只能呼叫函式,不能呼叫class)。

  2. C#通過C++ CLR(託管的C++)來呼叫nativeC++ DLL C++ CLR作為連結C#native之間的紐帶。

方法一的詳細過程如下:

  1. 1)開啟VS2015,新建C++ win32專案,過程如下圖:

 

2)然後新增nativeCPP.hnativeCPP.cpp連個檔案,分別編寫程式碼,如下圖:

NativeCPP.h :

nativeCPP.cpp : (函式實現)

  1. 在工程中再新增nativeCPP.def檔案:

檔案內容:

 

4)在解決方案中新增C#應用控制檯工程,

並設定為開始啟動專案(滑鼠移到ConsoleApplication_test專案上右擊):

Program.cs檔案內容如下:

編譯執行的結果如下:

二、方法二的詳細過程如下:

(1)新建C++ win 32 專案

(2)專案中新建

nativeCPP.h nativeCPP.cpp檔案,檔案內容如圖:

 

(3)在解決方案中新增新的類庫工程專案:

然後在CLRWrapper的專案中引用nativeCPP專案:

然後在CLRWrapper.h CLRWrapper.cpp檔案中分別新增如下內容:

 

 (4)在解決放在中新增C#的測試工程ConsoleApplication_test,並設定為開始啟動項。

然後在C#測試工程中新增對CLRWrapper的引用,並在Program.cs檔案裡面新增如下程式碼:

編譯通過,執行,會出現如下的情況:

這個是因為

C#執行檔案無法直接引用CLRWrapper的依賴項nativeCPP,所以這個時候需要手動把nativeCPP專案生產的nativeCPP.dllnativeCPP.pdb兩個檔案拷貝到C#工程的bin下面的Debug

END!!!!