動態鏈結庫的呼叫約定

2021-06-21 14:18:01 字數 1539 閱讀 7950

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中如...