動態鏈結庫的建立

2021-04-24 23:06:21 字數 1636 閱讀 7927

動態鏈結庫的建立

使用匯出函式關鍵字_declspec(dllexport)建立

// mydll.h

extern "c" _declspec(dllexport) int max(int a, int b);

extern "c" _declspec(dllexport) int min(int a, int b);

//mydll.cpp

#include

#include"mydll.h"

int max(int a, int b)

int min(int a, int b)

該動態鏈結庫編譯成功後,開啟mydll工程中的debug目錄,可以看到mydll.dll、mydll.lib兩個檔案。lib檔案中包含dll檔名和dll檔案中的函式名等,該lib檔案只是對應該dll檔案的"映像檔案",與dll檔案中,lib檔案的長度要小的多,在進行隱式鏈結dll時要用到它。讀者可能已經注意到在mydll.h中有關鍵字"extern c",它可以使其他程式語言訪問你編寫的dll中的函式。

用.def檔案建立工程mydll

library mydll

exports

maxmin

其中library語句說明該def檔案是屬於相應dll的,exports語句下列出要匯出的函式名稱。我們可以在.def檔案中的匯出函式後加@n,如max@1,min@2,表示要匯出的函式順序號,在進行顯式連時可以用到它。該dll編譯成功後,開啟工程中的debug目錄,同樣也會看到mydll.dll和mydll.lib檔案。

隱式鏈結

//dlltest.h

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

extern "c"_declspec(dllimport) int max(int a,int b);

extern "c"_declspec(dllimport) int min(int a,int b);

//testdll.cpp

#include

#include"dlltest.h"

int main()

如果dll使用的是def檔案,要刪除testdll.h檔案中關鍵字extern "c"。testdll.h檔案中的關鍵字progam commit是要visual c+的編譯器在link時,鏈結到mydll.lib檔案,當然,開發人員也可以不使用#pragma comment(lib,"mydll.lib")語句,而直接在工程的setting->link頁的object/moduls欄填入mydll.lib既可。

顯式鏈結

#include

#include

void main(void)

使用顯式鏈結應用程式編譯時不需要使用相應的lib檔案。另外,使用getprocaddress()函式時,可以利用makeintresource()函式直接使用dll中函式出現的順序號,如將getprocaddress(hdll,"min")改為getprocaddress(hdll, makeintresource(2))(函式min()在dll中的順序號是2),這樣呼叫dll中的函式速度很快,但是要記住函式的使用序號,否則會發生錯誤。

建立靜態鏈結庫 動態鏈結庫

下面的實操中的動態庫或者靜態庫名都用wujunwu 第一步 建立乙個源 建立靜態鏈結庫的源 include void func1 void int func2 int x,int y 第二步 建立乙個.件作為函式宣告 void func1 void intfunc2 int x,int y 第三步 ...

建立動態鏈結庫

要建立dll,就必須首先建立乙個或多個源 檔案,還有乙個連線檔案用來匯出函式。如果打算可以以載入時動態鏈結使用dll的話,還必須建立乙個導入庫。建立原始檔 dll的源 中包含了需匯出的函式及資料,還有內部函式及資料,另外可以有乙個可選的入口函式。你可以使用任意支援建立基於windows的dll工具來...

建立動態鏈結庫

要建立dll,就必須首先建立乙個或多個源 檔案,還有乙個連線檔案用來匯出函式。如果打算可以以載入時動態鏈結使用dll的話,還必須建立乙個導入庫。建立原始檔 dll的源 中包含了需匯出的函式及資料,還有內部函式及資料,另外可以有乙個可選的入口函式。你可以使用任意支援建立基於windows的dll工具來...