DLL檔案

DLL檔案

DLL檔案又稱“應用程式拓展”,是軟體檔案類型。在Windows中,許多應用程式並不是一個完整的執行檔,它們被分割成一些相對獨立的動態程式庫,即DLL檔案,放置於系統中。當我們執行某一個程式時,相應的DLL檔案就會被調用。一個應用程式可使用多個DLL檔案,一個DLL檔案也可能被不同的應用程式使用,這樣的DLL檔案被稱為共享DLL檔案。

連結方法

當您在應用程式中載入 DLL 時,可以使用兩種連結方法來調用導出的 DLL 函式。這兩種連結方法是載入時動態連結和運行時動態連結。

在運行時動態連結中,應用程式調用 LoadLibrary 函式或 LoadLibraryEx 函式以在運行時載入 DLL。成功載入DLL後,可以使用 GetProcAddress 函式獲得要調用的導出的 DLL 函式的地址。在使用運行時動態連結時,無需使用導入庫檔案。

Win32 DLL的特點

Win32 DLL與 Win16 DLL有很大的區別,這主要是由作業系統的設計思想決定的。一方面,在Win16 DLL中程式入口點函式和出口點函式(LibMain和WEP)是分別實現的;而在Win32 DLL中卻由同一函式DLLMain來實現。無論何時,當一個進程或執行緒載入和卸載DLL時,都要調用該函式,它的原型是

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

其中,第一個參數表示DLL的實例句柄;第三個參數系統保留;這裡主要介紹一下第二個參數,它有四個可能的值:DLL_PROCESS_ATTACH(進程載入),DLL_THREAD_ATTACH(執行緒載入),DLL_THREAD_DETACH(執行緒卸載),DLL_PROCESS_DETACH(進程卸載),在DLLMain函式中可以對傳遞進來的這個參數的值進行判別,並根據不同的參數值對DLL進行必要的初始化或清理工作。舉個例子來說,當有一個進程載入一個DLL時,系統分派給DLL的第二個參數為DLL_PROCESS_ATTACH,這時,你可以根據這個參數初始化特定的數據。另一方面,在Win16環境下,所有應用程式都在同一地址空間;而在Win32環境下,所有應用程式都有自己的私有空間,每個進程的空間都是相互獨立的,這減少了應用程式間的相互影響,但同時也增加了編程的難度。大家知道,在Win16環境中,DLL的全局數據對每個載入它的進程來說都是相同的;而在Win32環境中,情況卻發生了變化,當進程在載入DLL時,系統自動把DLL地址映射到該進程的私有空間,而且也複製該DLL的全局數據的一份拷貝到該進程空間,也就是說每個進程所擁有的相同的DLL的全局數據其值卻並不一定是相同的。因此,在Win32環境下要想在多個進程中共享數據,就必須進行必要的設定。亦即把這些需要共享的數據分離出來,放置在一個獨立的數據段里,並把該段的屬性設定為共享。

故障排除

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

Dependency Walker

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

·Dependency Walker 檢查是否丟失 DLL。

·Dependency Walker 檢查是否存在無效的程式檔案或 DLL。

·Dependency Walker 檢查導入函式和導出函式是否匹配。

·Dependency Walker 檢查是否存在循環依賴性錯誤。

·Dependency Walker 檢查是否存在由於針對另一不同作業系統而無效的模組。

通過使用 Dependency Walker,您可以記錄程式使用的所有 DLL。這可能有助於避免和更正將來可能發生的 DLL 問題。當您安裝 Microsoft Visual Studio 6.0 時,Dependency Walker 將位於以下目錄中:

drive\Program Files\Microsoft Visual Studio\Common\Tools

DLL Universal Problem Solver

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

·Dlister.exe:該實用工具枚舉計算機中的所有 DLL,並且將此信息記錄到一個文本檔案或資料庫檔案中。

·Dcomp.exe:該實用工具比較在兩個文本檔案中列出的 DLL,並產生包含差異的第三個文本檔案。

·Dtxt2DB.exe:該實用工具將通過使用 Dlister.exe 實用工具和 Dcomp.exe 實用工具創建的文本檔案載入到 dllHell資料庫中。

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

DLL影響

檔案修復

1、用Windows系統盤功能進行檔案修復;

2、若在此之前有一鍵備份過,可以重新還原;

3、從網上下載系統檔案然後復蓋到原資料夾里;

DLL檔案DLL檔案

相關詞條

相關搜尋

熱門詞條

聯絡我們