c呼叫約定:函式名字沒有發生改變,解決文字改編問題。缺點:無法匯出類的成員函式,只能匯出全域性函式。
dlltest.h標頭檔案
#ifdef dll1_api
#else
#define dll1_api extern "c" _declspec(dllimport)
#endif
dll1_api int add(int a,int b);
dll1_api int subtract(int a,int b);
dlltest.cpp原始檔
#define dll1_api extern "c" _declspec(dllexport)
dll1_api int add(int a,int b)
dll1_api int subtract(int a,int b)
c++呼叫約定:可以匯出類的成員函式。缺點:函式名字 發生了改變,文字改編了。
dlltest.h標頭檔案
#ifdef dll1_api
#else
#define dll1_api _declspec(dllimport)
#endif
dll1_api int add(int a,int b);
dll1_api int subtract(int a,int b);
dlltest.cpp原始檔#define dll1_api _declspec(dllexport)
dll1_api int add(int a,int b)
dll1_api int subtract(int a,int b)
標準呼叫約定:winapi呼叫約定(pascal呼叫約定)
dlltest.h標頭檔案
#ifdef dll1_api
#else
#define dll1_api extern "c" _declspec(dllimport)
#endif
dll1_api int _stdcall add(int a,int b);
dll1_api int _stdcall subtract(int a,int b)
dlltest.cpp原始檔
#define dll1_api extern "c" _declspec(dllexport)
dll1_api int _stdcall add(int a,int b)
dll1_api int _stdcall subtract(int a,int b)
模組定義檔案(def)
dlltest.def
library dll1test
exports
addsubtract
呼叫靜態鏈結庫和動態鏈結庫
呼叫靜態鏈結庫 靜態鏈結庫由.h和.lib檔案組成,h檔案在工程中用來宣告,而.lib檔案包含供外界呼叫的函式的原型。vc 6.0中呼叫靜態鏈結庫.lib共3種方法 1.首先使用語句 include lib.h 並將lib.h拷貝到當前工程目錄下 接著對staticlib smp.lib使用語句 p...
呼叫動態鏈結庫(dll)
步驟 1.tools options projects and solutions vc directories分別在包含檔案,庫檔案填加了路徑 這些路徑只告訴編譯器怎麼找檔案,沒有說把那裡面的檔案加入工程.若不設定,編譯報錯 無法開啟 檔案 2.project properties c c gen...
動態鏈結庫呼叫方式
首先來說說呼叫的原理 呼叫dll,首先需要將dll檔案映像到使用者程序的位址空間中,然後才能進行函式呼叫,這個函式和程序內部一般函式的呼叫方法相同。windows提供了兩種將dll映像到程序位址空間的方法 隱式呼叫 通過lib和標頭檔案 和顯式呼叫 只通過提供的dll檔案 下面對這兩種方式在vc中如...