動態鏈結庫的使用

2021-08-10 02:17:38 字數 2076 閱讀 3915

應用程式可以呼叫的dll函式,在dll中叫做匯出函式,而在應用程式中叫做匯入函式。應用程式中的匯入函式與dll檔案中的匯出函式進行鏈結有兩種方式:隱式鏈結和顯式鏈結。

在建立乙個dll檔案時,編譯器會自動生成乙個與該檔案對應的導入庫檔案(擴充套件名為lib)。該檔案包含了dll中所有匯出函式所有dll庫的名稱,應用程式可以根據這個檔案來尋找並載入dll。由於在程式中沒有出現載入dll的**,所以把這種鏈結方式叫做隱式鏈結。

windows搜尋dll的順序為:

1.         包含應用程式exe檔案的目錄。

2.         程序的當前工作目錄。

3.         windows系統目錄。

4.         windows目錄。

5.         列在path環境變數中的一系列目錄。

例子:宣告匯入函式。

#include

"stdafx.h"

void

sayhello(void);

int_tmain(int

argc, _tchar* argv)

另外在工程設定好lib的路徑。

如果沒有設定好,將連線不過。如下:

>linking...

1>2_dlldemocall.obj : error lnk2019: unresolved external symbol "void __cdecl sayhello(void)" (?sayhello@@yaxxz) referenced in function _wmain

注:隱式

鏈結需要庫檔案對應的標頭檔案

如果在應用程式中使用windows api

函式直接完成

dll庫函式的呼叫,那麼這種做法就叫做dll的顯式方式,當然這不必使用導入庫檔案了。

方法如下:

1獲得dll庫

通過呼叫win32的loadlibrary 函式,並以要使用的dll檔案所在的路徑為引數,可以取得dll。loadlibaray函式的原型如下:

hinstance loadlibrary(

lpctstrlplibfilename   // ddl的路徑

);

函式的返回值為dll庫的控制代碼。2.

獲得dll函式

獲得了dll的控制代碼之後,接下來就可以在應用程式中通過呼叫win32 api函式getprocaddress來獲得該dll中與匯入函式相匹配的匯出函式了。原型如下:

farprocgetprocaddress(
hmodulehmodule,// handle to dll module dll的控制代碼
lpcstrlpprocname   // name of function 匯入函式的名稱
);
getprocaddress函式的返回值為dll匯出函式位址。

3釋放dll庫

boolfreelibrary(
hmodulehlibmodule   // handle to loaded library module dll控制代碼
);
採用顯式鏈結方式呼叫dll庫,程式設計師可以決定載入哪個dll檔案,這使得程式的設計更為靈活。

動態鏈結庫使用 靜 動態鏈結庫使用總結

一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num1,int num2 int mult i...

使用動態鏈結庫

1.動態鏈結庫是程式執行時載入的庫,當動態鏈結庫正確安裝後,所有的程式都可以使用動態庫來執行程式。動態鏈結庫是目標檔案的集合,目標檔案在動態鏈結庫中的組織方式是按照特殊方式形成的。庫中函式和變數的位址是相對位址,不是絕對位址,其真實位址在呼叫動態庫的程式載入時形成。2.動態鏈結庫的名稱有別名 son...

使用動態鏈結庫

1.先建立乙個動態鏈結庫的工程 vs下,file new project win32 project dll t.h ifdef myapi export define myapi declspec dllexport else define myapi declspec dllimport end...