有些時候,為了使用別人已經寫好的c#庫檔案,我們需要使用c++呼叫c#庫檔案; 以下做了一簡單的呼叫工程,步驟如下:
1、準備c#庫 (dll檔案)
1)建立c#庫:
2)編寫c#類:
3)配置c#庫工程相關配置
(1)命名空間配置,輸出庫檔名配置:
(2)庫檔案輸出路徑:
2、準備c++工程:
1)建立c++工程:
2)clr支援(公共語言執行支援):
3)引用和呼叫c#**:
4)編譯直接執行:
5)執行除錯:
3、其他補充說明:
1)為什麼使用gcnew 而不使用 new ?
c++/cli中使用 gcnew 關鍵字用來表示 在託管堆上分配記憶體,並且區分其他指標的區別,使用 ^ 來代替 * 作為指標含義, 語義上大致如下:
(1)、gcnew返回的是乙個控制代碼(handle), 而new 返回的是實際的記憶體位址
(2)、gcnew建立的物件由虛擬機器託管,而new建立的物件必須自己來管理和釋放
在此不是有c++本身來分配記憶體空間,而是由其他虛擬機器託管分配,並且不需要c++程式來釋放空間
2)使用#using 巨集引入dll庫檔案, 而不是 #pragma comment(lib, "")
後面主要用於引入c/c++庫檔案
3)執行時可能會出現以下問題:
主要是由於exe程式載入的dll檔案不存在或未找到,可以:
將c#的庫檔案和pdb檔案 輸出到乙個公共的資料夾下:如: ..\out\debug\ 資料夾
將c++的編譯程式exe和pdb檔案也輸出到該公共資料夾下,
linker配置:
4、例程原始碼:
C 呼叫C Dll例程
form1.cs內容 using system using system.windows.forms using system.runtime.interopservices using system.text 申明dll中函式 dllimport kb dll.dll entrypoint inp...
C 呼叫C 庫檔案
winform下呼叫dll檔案,將dll銬入bin目錄下,using system.runtime.interopservices dllimport securitymaker.dll entrypoint security make public static extern void makes...
C 反射例程
1 建立用於反射使用的dll 新建乙個c 類庫專案,拷貝源 如下,編譯生成dll 假如dll的檔名是testreflect.dll using system namespace webtest public string writestring string s dsajkjflasjdfalksd...