本教程操作環(huán)境:windows7系統(tǒng)、Dell G3電腦。
DLL是Dynamic Link Library的縮寫,意為動態(tài)鏈接庫,,也有人稱作應(yīng)用程序拓展;它是一種可執(zhí)行文件,允許程序共享執(zhí)行特殊任務(wù)所需的代碼和其他資源。
【資料圖】
在Windows中,許多應(yīng)用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨(dú)立的動態(tài)鏈接庫,即DLL文件,放置于系統(tǒng)中。當(dāng)我們執(zhí)行某一個程序時,相應(yīng)的DLL文件就會被調(diào)用。一個應(yīng)用程序可有多個DLL文件,一個DLL文件也可能被幾個應(yīng)用程序所共用,這樣的DLL文件被稱為共享DLL文件。
DLL文件允許程序共享執(zhí)行特殊任務(wù)所必需的代碼和其他資源。比較大的應(yīng)用程序都由很多模塊組成,這些模塊分別完成相對獨(dú)立的功能,它們彼此協(xié)作來完成整個軟件系統(tǒng)的工作。可能存在一些模塊的功能較為通用,在構(gòu)造其它軟件系統(tǒng)時仍會被使用。在構(gòu)造軟件系統(tǒng)時,如果將所有模塊的源代碼都靜態(tài)編譯到整個應(yīng)用程序 EXE 文件中,會產(chǎn)生一些問題:一個缺點(diǎn)是增加了應(yīng)用程序的大小,它會占用更多的磁盤空間,程序運(yùn)行時也會消耗較大的內(nèi)存空間,造成系統(tǒng)資源的浪費(fèi);另一個缺點(diǎn)是,在編寫大的 EXE 程序時,在每次修改重建時都必須調(diào)整編譯所有源代碼,增加了編譯過程的復(fù)雜性,也不利于階段性的單元測試。
Windows 系統(tǒng)平臺上提供了一種完全不同的較有效的編程和運(yùn)行環(huán)境,你可以將獨(dú)立的程序模塊創(chuàng)建為較小的 DLL 文件,并可對它們單獨(dú)編譯和測試。在運(yùn)行時,只有當(dāng) EXE 程序確實(shí)要調(diào)用這些 DLL 模塊的情況下,系統(tǒng)才會將它們裝載到內(nèi)存空間中。這種方式不僅減少了 EXE 文件的大小和對內(nèi)存空間的需求,而且使這些 DLL 模塊可以同時被多個應(yīng)用程序使用。Windows 自己就將一些主要的系統(tǒng)功能以 DLL 模塊的形式實(shí)現(xiàn)。
一般來說,DLL 是一種磁盤文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴(kuò)展名的系統(tǒng)文件都可以是 DLL。它由全局?jǐn)?shù)據(jù)、服務(wù)函數(shù)和資源組成,在運(yùn)行時被系統(tǒng)加載到調(diào)用進(jìn)程的虛擬空間中,成為調(diào)用進(jìn)程的一部分。如果與其它 DLL 之間沒有沖突,該文件通常映射到進(jìn)程虛擬空間的同一地址上。DLL 模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL 可以有自己的數(shù)據(jù)段,但沒有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式;一個 DLL 在內(nèi)存中只有一個實(shí)例;DLL 實(shí)現(xiàn)了代碼封裝性;DLL 的編制與具體的編程語言及編譯器無關(guān)。
在 Win32 環(huán)境中,每個進(jìn)程都復(fù)制了自己的讀/寫全局變量。如果想要與其它進(jìn)程共享內(nèi)存,必須使用內(nèi)存映射文件或者聲明一個共享數(shù)據(jù)段。DLL 模塊需要的堆棧內(nèi)存都是從運(yùn)行進(jìn)程的堆棧中分配出來的。Windows 在加載 DLL 模塊時將進(jìn)程函數(shù)調(diào)用與 DLL 文件的導(dǎo)出函數(shù)相匹配。Windows 操作系統(tǒng)對 DLL 的操作僅僅是把 DLL 映射到需要它的進(jìn)程的虛擬地址空間里去。DLL 函數(shù)中的代碼所創(chuàng)建的任何對象(包括變量)都?xì)w調(diào)用它的線程或進(jìn)程所有。
DLL的優(yōu)點(diǎn)
當(dāng)程序使用 DLL 時,具有以下的優(yōu)點(diǎn): 使用較少的資源,當(dāng)多個程序使用同一個函數(shù)庫時,DLL 可以減少在磁盤和物理內(nèi)存中加載的代碼的重復(fù)量。這不僅可以大大影響在前臺運(yùn)行的程序,而且可以大大影響其他在 Windows 操作系統(tǒng)上運(yùn)行的程序。 推廣模塊式體系結(jié)構(gòu)DLL 有助于促進(jìn)模塊式程序的開發(fā)。這可以幫助您開發(fā)要求提供多個語言版本的大型程序或要求具有模塊式體系結(jié)構(gòu)的程序。模塊式程序的一個示例是具有多個可以在運(yùn)行時動態(tài)加載的模塊的計帳程序。 簡化部署和安裝當(dāng) DLL 中的函數(shù)需要更新或修復(fù)時,部署和安裝 DLL 不要求重新建立程序與該 DLL 的鏈接。此外,如果多個程序使用同一個 DLL,那么多個程序都將從該更新或修復(fù)中獲益。當(dāng)您使用定期更新或修復(fù)的第三方 DLL 時,此問題可能會更頻繁地出現(xiàn)。
更多相關(guān)知識,請訪問常見問題欄目!
以上就是dll文件是什么意思的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
關(guān)鍵詞: dll文件