dll文件指的是什么

本篇文章為大家展示了dll文件指的是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

略陽網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,略陽網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為略陽上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的略陽做網(wǎng)站的公司定做!

DLL是Dynamic Link Library的縮寫,意為動態(tài)鏈接庫。DLL文件一般被存放在C:WindowsSystem目錄下。DLL是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫。

在Windows中,許多應(yīng)用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即DLL文件,放置于系統(tǒng)中。當(dāng)我們執(zhí)行某一個程序時,相應(yīng)的DLL文件就會被調(diào)用。一個應(yīng)用程序可有多個DLL 文件,一個DLL文件也可能被幾個應(yīng)用程序所共用,這樣的DLL文件被稱為共享DLL文件。

例如,在 Windows 操作系統(tǒng)中,Comdlg32 DLL 執(zhí)行與對話框有關(guān)的常見函數(shù)。因此,每個程序都可以使用該 DLL 中包含的功能來實現(xiàn)“打開”對話框。這有助于促進代碼重用和內(nèi)存的有效使用。

通過使用 DLL,程序可以實現(xiàn)模塊化,由相對獨立的組件組成。例如,一個計帳程序可以按模塊來銷售??梢栽谶\行時將各個模塊加載到主程序中(如果安裝了相應(yīng)模塊)。因為模塊是彼此獨立的,所以程序的加載速度更快,而且模塊只在相應(yīng)的功能被請求時才加載。

此外,可以更為容易地將更新應(yīng)用于各個模塊,而不會影響該程序的其他部分。例如,您可能具有一個工資計算程序,而稅率每年都會更改。當(dāng)這些更改被隔離到 DLL 中以后,您無需重新生成或安裝整個程序就可以應(yīng)用更新。

Windows 操作系統(tǒng)中的一些作為 DLL 實現(xiàn)的文件

1、ActiveX 控件 (.ocx) 文件

ActiveX 控件的一個示例是日歷控件,它使您可以從日歷中選擇日期。

2、控制面板 (.cpl) 文件

cpl 文件的一個示例是位于控制面板中的項。每個項都是一個專用 DLL。

3、設(shè)備驅(qū)動程序 (.drv) 文件

設(shè)備驅(qū)動程序的一個示例是控制打印到打印機的打印機驅(qū)動程序。

程序使用 DLL 的優(yōu)點

1 使用較少的資源

當(dāng)多個程序使用同一個函數(shù)庫時,DLL 可以減少在磁盤和物理內(nèi)存中加載的代碼的重復(fù)量。這不僅可以大大影響在前臺運行的程序,而且可以大大影響其他在 Windows 操作系統(tǒng)上運行的程序。

2 推廣模塊式體系結(jié)構(gòu)

DLL 有助于促進模塊式程序的開發(fā)。這可以幫助您開發(fā)要求提供多個語言版本的大型程序或要求具有模塊式體系結(jié)構(gòu)的程序。模塊式程序的一個示例是具有多個可以在運行時動態(tài)加載的模塊的計帳程序。

3 簡化部署和安裝

當(dāng) DLL 中的函數(shù)需要更新或修復(fù)時,部署和安裝 DLL 不要求重新建立程序與該 DLL 的鏈接。此外,如果多個程序使用同一個 DLL,那么多個程序都將從該更新或修復(fù)中獲益。當(dāng)您使用定期更新或修復(fù)的第三方 DLL 時,此問題可能會更頻繁地出現(xiàn)。

1、如何了解某應(yīng)用程序使用哪些DLL文件

右鍵單擊該應(yīng)用程序并選擇快捷菜單中的“快速查看”命令,在隨后出現(xiàn)的“快速查看”窗口的“引入表”一欄中你將看到其使用DLL文件的情況。

2、如何知道DLL文件被幾個程序使用

運行Regedit,進入 HKEY_LOCAL_MACHINESoftwareMicrosrftWindowsCurrentVersionSharedDlls子鍵查看,其右邊窗口中就顯示了所有DLL文件及其相關(guān)數(shù)據(jù),其中數(shù)據(jù)右邊小括號內(nèi)的數(shù)字就說明了被幾個程序使用,(2)表示被兩個程序使用,(0)則表示無程序使用,可以將其刪除。

3、如何解決DLL文件丟失的情況

有時在卸載文件時會提醒你刪除某個DLL文件可能會影響其他應(yīng)用程序的運行。所以當(dāng)你卸載軟件時,就有可能誤刪共享的DLL文件。一旦出現(xiàn)了丟失DLL文件的情況,如果你能確定其名稱,可以在Sysbckup(系統(tǒng)備份文件夾)中找到該DLL文件,將其復(fù)制到System文件夾中。

如果這樣不行,在電腦啟動時又總是出現(xiàn)“***dll文件丟失……”的提示框,你可以在“開始/運行”中運行 Msconfig,進入系統(tǒng)配置實用程序?qū)υ捒蛞院?,單擊選擇“System.ini”標簽,找出提示丟失的DLL文件,使其不被選中,這樣開機時就不會出現(xiàn)錯誤提示了。

rundll的功能是以命令列的方式呼叫Windows的動態(tài)鏈結(jié)庫。

Rundll32.exe與Rundll.exe的區(qū)別就在于前者是用于32位的鏈結(jié)庫,后者是用于16位的鏈結(jié)庫。rundll32.exe是專門用來調(diào)用dll文件的程序。

如果用的是Win98,rundll32.exe一般存在于Windows目錄下;

如果用的WinXP,rundll32.exe一般存在于WindowsSystem32目錄下。

若是在其它目錄,就可能是一個木馬程序,它會偽裝成rundll32.exe。

DLL 故障排除工具

可以使用多個工具來幫助您解決 DLL 問題。以下是其中的部分工具。

1、Dependency Walker

Dependency Walker 工具可以遞歸掃描以尋找程序所使用的所有依賴 DLL。當(dāng)您在 Dependency Walker 中打開程序時,Dependency Walker 會執(zhí)行下列檢查:

  • Dependency Walker 檢查是否丟失 DLL。

  • Dependency Walker 檢查是否存在無效的程序文件或 DLL。

  • Dependency Walker 檢查導(dǎo)入函數(shù)和導(dǎo)出函數(shù)是否匹配。

  • Dependency Walker 檢查是否存在循環(huán)依賴性錯誤。

  • Dependency Walker 檢查是否存在由于針對另一不同操作系統(tǒng)而無效的模塊。

通過使用 Dependency Walker,您可以記錄程序使用的所有 DLL。這可能有助于避免和更正將來可能發(fā)生的 DLL 問題。當(dāng)您安裝 Microsoft Visual Studio 6.0 時,Dependency Walker 將位于以下目錄中:
drive\Program Files\Microsoft Visual Studio\Common\Tools

2、DLL Universal Problem Solver

DLL Universal Problem Solver (DUPS) 工具用于審核、比較、記錄和顯示 DLL 信息。下表說明了組成 DUPS 工具的實用工具:

  • Dlister.exe:該實用工具枚舉計算機中的所有 DLL,并且將此信息記錄到一個文本文件或數(shù)據(jù)庫文件中。

  • Dcomp.exe:該實用工具比較在兩個文本文件中列出的 DLL,并產(chǎn)生包含差異的第三個文本文件。

  • Dtxt2DB.exe:該實用工具將通過使用 Dlister.exe 實用工具和 Dcomp.exe 實用工具創(chuàng)建的文本文件加載到 dllHell 數(shù)據(jù)庫中。

  • DlgDtxt2DB.exe:該實用工具提供 Dtxt2DB.exe 實用工具的圖形用戶界面 (GUI) 版本。

DLL 的類型

當(dāng)您在應(yīng)用程序中加載 DLL 時,可以使用兩種鏈接方法來調(diào)用導(dǎo)出的 DLL 函數(shù)。這兩種鏈接方法是加載時動態(tài)鏈接和運行時動態(tài)鏈接。

1、加載時動態(tài)鏈接

在加載時動態(tài)鏈接中,應(yīng)用程序像調(diào)用本地函數(shù)一樣對導(dǎo)出的 DLL 函數(shù)進行顯式調(diào)用。要使用加載時動態(tài)鏈接,請在編譯和鏈接應(yīng)用程序時提供頭文件 (.h) 和導(dǎo)入庫文件 (.lib)。當(dāng)您這樣做時,鏈接器將向系統(tǒng)提供加載 DLL 所需的信息,并在加載時解析導(dǎo)出的 DLL 函數(shù)的位置。

2、運行時動態(tài)鏈接

在運行時動態(tài)鏈接中,應(yīng)用程序調(diào)用 LoadLibrary 函數(shù)或 LoadLibraryEx 函數(shù)以在運行時加載 DLL。成功加載 DLL 后,可以使用 GetProcAddress 函數(shù)獲得要調(diào)用的導(dǎo)出的 DLL 函數(shù)的地址。在使用運行時動態(tài)鏈接時,無需使用導(dǎo)入庫文件。

Win32 DLL的特點

Win32 DLL與 Win16 DLL有很大的區(qū)別,這主要是由操作系統(tǒng)的設(shè)計思想決定的。一方面,在Win16 DLL中程序入口點函數(shù)和出口點函數(shù)(LibMain和WEP)是分別實現(xiàn)的;而在Win32 DLL中卻由同一函數(shù)DLLMain來實現(xiàn)。無論何時,當(dāng)一個進程或線程載入和卸載DLL時,都要調(diào)用該函數(shù),它的原型是

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);

其中,***個參數(shù)表示DLL的實例句柄;第三個參數(shù)系統(tǒng)保留;

這里主要介紹一下第二個參數(shù),它有四個可能的值:

  • DLL_PROCESS_ATTACH(進程載入),

  • DLL_THREAD_ATTACH(線程載入),

  • DLL_THREAD_DETACH(線程卸載),

  • DLL_PROCESS_DETACH(進程卸載)

在DLLMain函數(shù)中可以對傳遞進來的這個參數(shù)的值進行判別,并根據(jù)不同的參數(shù)值對DLL進行必要的初始化或清理工作。舉個例子來說,當(dāng)有一個進程載入一個DLL時,系統(tǒng)分派給DLL的第二個參數(shù)為DLL_PROCESS_ATTACH,這時,你可以根據(jù)這個參數(shù)初始化特定的數(shù)據(jù)。

另一方面,在Win16環(huán)境下,所有應(yīng)用程序都在同一地址空間;而在Win32環(huán)境下,所有應(yīng)用程序都有自己的私有空間,每個進程的空間都是相互獨立的,這減少了應(yīng)用程序間的相互影響,但同時也增加了編程的難度。大家知道,在Win16環(huán)境中,DLL的全局數(shù)據(jù)對每個載入它的進程來說都是相同的;而在Win32環(huán)境中,情況卻發(fā)生了變化,當(dāng)進程在載入DLL時,系統(tǒng)自動把DLL地址映射到該進程的私有空間,而且也復(fù)制該DLL的全局數(shù)據(jù)的一份拷貝到該進程空間,也就是說每個進程所擁有的相同的DLL的全局數(shù)據(jù)其值卻并不一定是相同的。

因此,在Win32環(huán)境下要想在多個進程中共享數(shù)據(jù),就必須進行必要的設(shè)置。亦即把這些需要共享的數(shù)據(jù)分離出來,放置在一個獨立的數(shù)據(jù)段里,并把該段的屬性設(shè)置為共享。

上述內(nèi)容就是dll文件指的是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞名稱:dll文件指的是什么
分享網(wǎng)址:http://muchs.cn/article24/jejsje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、云服務(wù)器、小程序開發(fā)、外貿(mào)建站、標簽優(yōu)化網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化