C#呼叫非託管C++DLL的兩種方法
C#編寫的程式碼屬於跨平臺的託管程式碼,C++語言可以編寫託管(managed)和非託管(native)程式碼。在C#與C++的混合程式設計中,經常會使用C#來呼叫native C++的DLL,下面有兩種常用的呼叫方法供大家參考。
-
使用P/Invoke直接呼叫native C++ Dll裡面的函式。(注:此方法只能呼叫函式,不能呼叫class)。
-
C#通過C++ CLR(託管的C++)來呼叫nativeC++ DLL, C++ CLR作為連結C#與native之間的紐帶。
方法一的詳細過程如下:
-
(1)開啟VS2015,新建C++ win32專案,過程如下圖:
(
NativeCPP.h :
nativeCPP.cpp : (函式實現)
-
在工程中再新增nativeCPP.def檔案:
檔案內容:
(4)在解決方案中新增C#應用控制檯工程,
並設定為開始啟動專案(滑鼠移到ConsoleApplication_test專案上右擊):
在Program.cs檔案內容如下:
編譯執行的結果如下:
二、方法二的詳細過程如下:
(1)新建C++ win 32 專案
(2)專案中新建
(3)在解決方案中新增新的類庫工程專案:
然後在CLRWrapper的專案中引用nativeCPP專案:
然後在CLRWrapper.h和 CLRWrapper.cpp檔案中分別新增如下內容:
(4)在解決放在中新增C#的測試工程ConsoleApplication_test,並設定為開始啟動項。
然後在C#測試工程中新增對CLRWrapper的引用,並在Program.cs檔案裡面新增如下程式碼:
編譯通過,執行,會出現如下的情況:
這個是因為
END!!!!