系統: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...