靜態呼叫靜態呼叫方式的特點是由編譯系統完成對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 ...