動態鏈結庫

2022-10-11 14:09:13 字數 1359 閱讀 6179

動態鏈結庫英文dll 是dynamic libarary得縮寫。

dll中包含若干公用的**、資料等,可供其他模組(dll或exe檔案等)使用

dll中並不是所有的函式都必須供其他模組使用,只有經過** 匯出(export)**後才允許被外部正常呼叫

dll最初用於節約應用程式所需要的磁碟空間和記憶體空間。早前在傳統的非共享庫中,一部分**簡單的附加到呼叫的程式中,

如果兩個程式同時呼叫乙個子程式,就會出現兩份**

windowsapi就存在與動態鏈結庫中。對於多個程序共同使用的dll檔案來說,在屋裡記憶體中只有乙份檔案,不過是被分別對映到了不同的程序記憶體空間,從而極大的降低了記憶體的消耗

入口函式:dllmain函式是dll模組的預設入口點。當windows載入dll模組時呼叫這一函式。 如果沒有dllmain函式程式也能正常執行,此函式是可選函式。

作為乙個dll檔案,它的最大作用就是提供函式給其他的模組使用,提供的函式叫匯出函式。

匯出方式:1.宣告匯出 2.模組定義檔案匯出

除了匯出函式外,dll檔案還可以匯出遍歷,c++類

extern "c" declspec(dllexport) function

建立檔案為.def   

library "mydll" //匯出dll名稱

exports

my_min @ 1 //函式名 @序號

對於dll專案,編譯器通常會產生兩個檔案,分別是 .dll.lib其中dll是動態鏈結庫,儲存了所有的**和資料,lib是導入庫通過隱式鏈結的方式調dll匯出的函式

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

extern "c" int my_export(int a ,int b);

顯示鏈結方式呼叫匯出函式

loadlibrary()api函式

//載入dll 引數:dll的檔案路徑

hmodule hmodule = loadlibrary(l"mydll.dll") ;

//獲取相應函式 第乙個引數 模組控制代碼 第二個引數: 函式的名稱

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...