C 呼叫C 建立的動態庫

2021-10-05 08:34:22 字數 2269 閱讀 4215

系統:win10

開發工具:vs2015

啟動vs2015->檔案->新建->專案,按下圖進行選擇填寫,選擇win32控制台應用程式或win32專案都可以,這兩相都會彈出相同的建立視窗。

在win32應用程式嚮導對話方塊中選擇【下一步】

按下圖進行勾選

匯出符號作用:

生成的**中會自動包含乙個匯出變數、乙個匯出函式和乙個匯出類的示例,並且對應的.**件中也會建立相應的匯出操作,可加快程式開發。

預編譯頭作用:

vs 預設情況下會建立並使用預編譯標頭檔案(也就是自動建立 stdafx.h 和 stdafx.cpp 這兩個檔案),以便在編譯時加快編譯速度,預編譯器將它編譯後,會生成乙個 pre-compiled header ,也就是 pch 檔案,這樣下次就可以直接使用這裡已經編譯好了的**了。

整個測試專案建立後,整體效果如下圖:

將mydll.cpp中紅色框內vs自動建立的示例**刪除掉

將mydll.h中紅色框內vs自動建立的示例**刪除掉

mydll.h中新增函式add匯出形式,注意是extern_c,以c語言函式名匯出可以保證匯出的函式名不變

extern_c

mydll_api

intadd

(int a,

int b)

;

mydll.cpp中新增如下圖紅色框中的函式add的實現**

mydll_api

intadd

(int a,

int b)

生成解決方案,此時在專案的目錄的debug資料夾下會看到生成的dll。

生成時注意,選擇release還是debug,還有選擇x86,還是x64.

一般選擇release,因為release快。這裡選擇release,x86.

建立c#窗體應用程式,呼叫c++建立的dll

建立後的整體效果如下圖:注意這裡的debug,x86.

生成該專案,然後將編譯好的dll拷貝到debug資料夾下

往窗體上拖入乙個label控制項,用於顯示計算結果,然後雙擊窗體進入**,新增如下

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.threading.tasks;

using system.windows.forms;

using system.runtime.interopservices;

namespace winmydll

private

void

form1_load

(object sender,

eventargs e)

}}

在winmydll專案上右擊選擇【設為啟動專案】,然後執行程式,結果如下圖所示:

C呼叫C 動態庫,靜態庫

c呼叫c 動態庫,靜態庫 1 include 2 using namespace std 34 class paul 5 10 11 int paul add int a,int b 12 17 18 extern c 如果沒有則不行 19 25 1 include 2 extern void ca...

C 呼叫C 的動態庫dll

以往我們經常是需要使用c 來呼叫c 的dll,這通過pinvoke就能實現。現在在實際的專案過程中,有時會遇到在c 的專案中呼叫某個c 的dll來完成特定的某個功能,我們都知道,native c 是沒辦法直接呼叫.net平台的dll的。那有沒有辦法來做到這一點了?答案是肯定的。雖然,native c...

C 呼叫C C 建立的非託管動態庫

c 可以呼叫由c c 語言建立的非託管動態鏈結庫,這需要用到 dllimport dll 根據msdn上的解釋,dllimport註解 attribute 用於指定乙個非託管的動態鏈結庫的匯出函式為靜態入口點。下面引用乙個官方的例子來說明該註解的用法 using system using syste...