dll檔案包含乙個匯出表。此匯出表中包含dll匯出給其他可執行檔案的函式名稱。這些都是dll的入口;並且只有在匯出表中的函式才可以被其他可執行檔案訪問。dll中的其他函式是dll私有的。
def檔案最少要包括下面的模組定義語句。
檔案的第一條語句必須是library語句。此語句定義了def檔案所屬的dll。library語句後寫入dll名稱。鏈結器將此名稱放入dll導入庫。
一種是lib包含了函式所在的dll檔案和檔案中函式位置的資訊(入口),**由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。一種是lib包含函式**本身,在編譯時直接將**加入程式當中,稱為靜態鏈結庫static link library。
動態鏈結使用動態鏈結庫,允許可執行模組(.dll檔案或.exe檔案)僅包含在執行時定位dll函式的可執行**所需的資訊。
靜態鏈結使用靜態鏈結庫,鏈結器從靜態鏈結庫lib獲取所有被引用函式,並將庫同**一起放到可執行檔案中。
關於lib和dll的區別如下:
(1)lib是編譯時用到的,dll是執行時用到的。如果要完成源**的編譯,只需要lib;如果要使動態鏈結的程式執行起來,只需要dll。
(2)如果有dll檔案,那麼lib一般是一些索引資訊,記錄了dll中函式的入口和位置,dll中是函式的具體內容;如果只有lib檔案,那麼這個lib檔案是靜態編譯出來的,索引和實現都在其中。使用靜態編譯的lib檔案,在執行程式時不需要再掛動態庫,缺點是導致應用程式比較大,而且失去了動態庫的靈活性,發布新版本時要發布新的應用程式才行。
(3)動態鏈結的情況下,有兩個檔案:乙個是lib檔案,乙個是dll檔案。lib包含被dll匯出的函式名稱和位置,dll包含實際的函式和資料,應用程式使用lib檔案鏈結到dll檔案。在應用程式的可執行檔案中,存放的不是被呼叫的函式**,而是dll中相應函式**的位址,從而節省了記憶體資源。dll和lib檔案必須隨應用程式一起發行,否則應用程式會產生錯誤。如果不想用lib檔案或者沒有lib檔案,可以用win32 api函式loadlibrary、getprocaddress裝載。
dll檔案的c 製作dll檔案的c 製作
dll檔案的c 製作 1 首先用vs2005建立乙個c 的dll動態鏈結庫檔案,這時,dlltest.cpp 定義 dll 應用程式的入口點。include stdafx.h include dlltest.h ifdef managed pragma managed push,off endif ...
Dtb檔案組成
dtb檔案由4部分組成 fdt header memory reserve map device tree structure device tree strings。前三部分都是4位元組對齊,最後一部分 device tree strings 不要求4位元組對齊。struct fdt header...
ZIP檔案組成
壓縮原始檔資料區 壓縮源檔案目錄區 壓縮源檔案目錄結束標誌 1 壓縮原始檔資料區 在這個資料區中每乙個壓縮的原始檔 目錄都是一條記錄,記錄的格式如下 檔案頭 檔案資料 資料描述符 a 檔案頭結構 組成 長度 檔案頭標記 4 bytes 0x04034b50 解壓檔案所需 pkware 版本 2 by...