DLL的呼叫方式

2021-06-09 07:26:49 字數 1375 閱讀 6463

靜態呼叫靜態呼叫方式的特點是由編譯系統完成對dll的載入和應用程式結束時 dll 的解除安裝。當呼叫某dll的應用程式結束時,若系統中還有其它程式使用該dll,則windows對dll的應用記錄減1,直到所有使用該dll的程式都結束時才釋放它。靜態呼叫方式簡單實用,但不如動態呼叫方式靈活。

//dll

extern "c" __declspec(dllexport) void winapi dll_fun(cstring str)

//exe

#pragma comment(lib,"onedll.lib")

extern "c" __declspec(dllimport) void winapi dll_fun(cstring str);

動態呼叫

//exe

typedef void (winapi *pfun)(cstring);

pfun dll_fun = null;

hinstance hinstance = loadlibrary(l"onedll.dll");

if(hinstance)

dll_fun = (pfun)getprocaddress(hinstance, "dll_fun");

if(dll_fun)

dll_fun(_t("hello"));

freelibrary(hinstance);

dll內的函式分為兩種:

(1)dll匯出函式,可**用程式呼叫;

(2) dll內部函式,只能在dll程式使用,應用程式無法呼叫它們。

宣告匯出函式

dll中匯出函式的宣告有兩種方式:一種為例子中給出的在函式宣告中加上__declspec(dllexport),這裡不再舉例說明;另外一種方式是採用模組定義(.def) 檔案宣告,.def檔案為鏈結器提供了有關被鏈結程式的匯出、屬性及其他方面的資訊。

下面的**演示了怎樣同.def檔案將函式宣告為dll匯出函式(需在工程中新增.def檔案):

library      "onedll"

exports

dll_fun;

.def檔案的規則為:

(1)library語句說明.def檔案相應的dll;

(2)exports語句後列出要匯出函式的名稱。可以在.def檔案中的匯出函式

名後加@n,表示要匯出函式的序號為n(在進行函式呼叫時,這個序號將發揮

其作用);

(3).def 檔案中的注釋由每個注釋行開始處的分號 (;) 指定,且注釋不能

與語句共享一行。

DLL 呼叫方式

dll 動態連線庫 分為動態呼叫和靜態呼叫。1 動態呼叫 首先 在vc 6.0中建立 win32 dynamic link library工程建立乙個動態連線庫工程 在標頭檔案testdll.h中寫下 extern c int declspec dllexport add int numa,int ...

DLL 呼叫方式

dll 動態連線庫 然而可以分為動態調用於靜態呼叫。下面我分別舉乙個例子說說。1 動態呼叫 首先 在vc 6.0中建立 win32 dynamic link library工程建立乙個動態連線庫工程 在標頭檔案testdll.h中寫下 extern c int declspec dllexport ...

DLL 呼叫方式

dll 動態連線庫 然而可以分為動態調用於靜態呼叫。下面我分別舉乙個例子說說。1 動態呼叫 首先 在vc 6.0中建立 win32 dynamic link library工程建立乙個動態連線庫工程 在標頭檔案testdll.h中寫下 extern c int declspec dllexport ...