C 呼叫C 庫簡單例程

2022-01-14 13:32:44 字數 1571 閱讀 4601

有些時候,為了使用別人已經寫好的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...