文章編號: 815065 - 上次校閱: 2007年12月4日 - 版次: 5.9 什麼是 DLL ?
在此頁中結論本文將告訴您哪些動態連結程式庫 (DLL) 是和各種問題當您使用 DLL 時, 可能會發生 然後, 本文告訴您開發您自己的 DLL 時, 您應考慮到一些進階的問題。 本文說明動態連結方法, DLL 相依性, DLL 進入點, 在描述哪些 DLL 是, 匯出 DLL 函式和疑難排解工具 DLL 這份文件會完成以高階比較對 Microsoft . NET Framework 組件的 DLL。 INTRODUCTION 適用於 Microsoft Windows 作業系統, 」 適用於 > 一節中所列, 大部分的作業系統功能是由動態連結程式庫 (DLL)。 由 DLL, 除此之外當您在其中一個的 Windows 作業系統, 執行程式大部分的程式功能可能會來提供。 舉例來說, 某些程式可能會包含許多不同的模組, 並且每個模組的程式會包含並分佈在 DLL。
使用的 DLL 可協助升級的程式碼、 程式碼重複使用、 有效率的記憶體使用量, modularization, 減少磁碟空間。 因此, 作業系統及程式載入速度較快, 執行速度, 並佔用較少的磁碟空間在電腦上。 當某個程式使用一個 DLL, 被呼叫的相依性的問題可能會產生沒有要執行程式。 當某個程式使用一個 DLL, 建立相依性。 如果另一個程式會覆寫並中斷此相依性, 原始程式可能未成功執行。 在引入的 Microsoft . NET Framework, 大部分的相依性問題已經被排除藉由使用組件。 其他相關資訊什麼是 DLL ?DLL 是程式庫, 其中包含程式碼和所可以是使用由多個程式在同一時間資料。 例如, 在 Windows 作業系統, Comdlg32 DLL 執行一般相關函式 ] 對話方塊 因此, 每個程式可以使用這個 DLL 來實作的 開啟舊檔 ] 對話方塊中所包含功能。 這有助於提升程式碼重複使用及有效率的記憶體使用量。藉由使用一個 DLL, 程式可分割成個別的元件模組化。 舉例來說, 會計程式可能會是銷售由模組。 每個模組到主要程式可以載入在 Run Time 如果安裝了該模組。 由於模組是分開, 載入時間的程式並快, 要求該功能時, 只載入模組。 除此之外, 更新程式是容易套用至每個模組, 而不會影響其他部分的程式。 例如, 您可能會有一個發薪程式, 並變更每一年的稅率。 當這些變更將會隔離至 DLL, 可以套用的更新程式, 而不需要來建立或重新安裝整個程式。 下列清單描述一些的 DLL 為在 Windows 作業系統中實作的檔案:
DLL 優點下列清單描述部分的優點當程式使用 DLL 所提供:
DLL 相依性當在另一個 DLL, 某個程式或 DLL 使用 DLL 函式會建立相依性。 因此, 程式不再是獨立 (Self - Contained), 並程式是否中斷相依性可能會遇到問題。 舉例來說, 如果發生下列動作的其中一個程式可能無法執行:
下列清單說明變更具有已介紹在 Microsoft Windows 2000 以及在更新版本 Windows 作業系統, 以協助減少相依性問題:
DLL 疑難排解工具有數種工具可用來協助您疑難排解 DLL 問題。 下列工具是一些的這些工具。Dependency WalkerDependency Walker 工具可以遞迴地 scan for 由程式所使用所有相依 DLL。 當您在 Dependency Walker, 開啟某個程式 Dependency Walker 會執行下列檢查:
\Program Files \Microsoft Visual Studio\Common\Tools 磁碟機 DLL 萬用 [ 規劃求解 ] 問題DLL 通用問題 [ 規劃求解 ] (DUPS) 工具是用來稽核、 比較, 文件, 和顯示 DLL 資訊 下列清單描述構成 DUPS 工具公用程式:
247957?
(http://support.microsoft.com/kb/247957/
)
使用 DUPS.exe 來解決 DLL 相容性問題
DLL [ 說明 ] 資料庫DLL [ 說明 ] 資料庫可協助您找出特定版本的 DLL 已安裝由 Microsoft 軟體產品。 如需資料庫, DLL [ 說明 ] 資訊請造訪下列 Microsoft 網站:http://support.microsoft.com/dllhelp/
(http://support.microsoft.com/dllhelp/)
DLL 開發本節說明問題和需求, 您應考慮到開發您自己的 DLL 時。類型的 DLL當您載入 DLL 的應用程式中, 連結的兩種方法讓您呼叫匯出 DLL 函式。 連結的兩個方法是載入時間 - 動態連結和 Run - Time 動態連結。載入時間 - 動態連結在載入時間 - 動態連結, 應用程式進行明確呼叫匯出 DLL 函式類似本機函式。 若要使用動態載入時間 - 連結, 當您編譯和連結應用程式提供標頭 (Header File, . h) 檔和一個匯入程式庫 (. lib) 檔。 當您這麼做, 連結器將向系統提供所需來載入 DLL 並在載入時間解決匯出 DLL 函式位置資訊。Run - Time 動態連結在 Run - Time 動態連結, 的應用程式呼叫 LoadLibrary 函式或要在 Run Time 載入 DLL LoadLibraryEx 函數。 在成功地載入該 DLL, 使用 GetProcAddress 函式來取得, 您要呼叫匯出 DLL 函式的位址。 當您使用 Run - Time 動態連結, 您不需要的匯入程式庫檔。下列清單說明何時該使用 Run - Time 動態連結時, 載入時間 - 使用動態連結應用程式準則:
DLL 進入點當您建立一個 DLL, 您可以選擇性地指定的進入點函式。 當處理序或執行緒附加至該 DLL 本身會呼叫進入點函式或從 DLL 本身卸離。 您可以使用到起始資料結構或到損毀資料結構所需由 DLL 進入點函式。 除此之外, 如果應用程式是多執行緒, 您可以使用儲存執行緒本機區 (Thread Local Storage, TLS) 來配置記憶體是專屬於進入點函式中的每個執行緒。 下列程式碼是 DLL 進入點函式的範例。進入點函式應該只執行簡單的初始設定工作並不應該呼叫任何其他 DLL 載入或終止函式。 舉例來說, 在進入點函式, 您應該不直接或間接呼叫 LoadLibrary 函式或 LoadLibraryEx 函式。 正在終止處理序時, 除此之外, 不應呼叫 FreeLibrary 函式。 注意 在多執行緒應用程式, 確定是同步 DLL 全域資料的存取權 (執行緒安全), 以避免資料可能損毀 (執行緒安全), 以避免可能資料損毀。 如果要執行這項操作, 使用 TLS 來提供唯一資料為每個執行緒。 匯出 DLL 函式來匯出 DLL 函式, 您可以在匯出 DLL 函式加入函式關鍵字或建立模組定義 (. def) 檔列出匯出 DLL 函式。若要使用函式關鍵字, 您必須宣告每個在您想要使用下列關鍵字來匯出函式: __declspec (dllexport) 您若要在應用程式, 使用匯出 DLL 函式必須宣告每個函式, 您要匯入以下面關鍵字:
__declspec (dllimport) 通常, 您會使用一個標頭檔具有 define 陳述式和 ifdef 陳述式來區隔匯出陳述式和匯入陳述式。
您也可以使用模組定義檔來匯出 DLL 函式宣告 當您使用模組定義檔案, 您不須將函式關鍵字加入至匯出 DLL 函式。 在模組定義檔, LIBRARY 陳述式和 EXPORTS 陳述式宣告為 DLL。 下列程式碼是定義檔的範例。 範例 DLL 和應用程式藉由選取 Win 32 動態連結程式庫 專案類型或 MFC AppWizard (dll) 專案類型來在 Microsoft Visual C++ 6.0, 您可以建立 DLL。下列程式碼是範例的 Visual C++ 中藉由使用 Win 32 動態連結程式庫 專案類型所建立 DLL。 Run - Time 動態連結, 在您使用程式碼都類似於下列程式碼來呼叫 SampleDLL.dll 匯出 DLL 函式
. NET Framework 組件在引入的 Microsoft . NET 和 . NET Framework, 大部份一種是與 DLL 相關聯的問題已經被排除藉由使用組件。 組件是一個邏輯單位的功能在控制項的 . NET Common Language Runtime (CLR) 下執行。 組件實際存在當做 . dll 檔或 . exe 檔案。 不過, 內部使用的組件有很大的不同由 Microsoft Win 32 DLL。組件檔案包含組件資訊清單、 型別中繼資料、 Microsoft Intermediate Language (MSIL) 程式碼及其他資源。 組件資訊清單含有組件中繼資料, 提供所需為組件設定為自我描述的所有資訊。 下列資訊包含在組件資訊清單:
下列清單說明幾項功能的組件相較於 Win 32 DLL 的功能:
?考 如需 DLL 和 . NET Framework 組件, 請造訪下列 Microsoft 網站:
DLL [ 說明 ] 資料庫 http://support.microsoft.com/dllhelp (http://support.microsoft.com/dllhelp) DLL 衝突 http://msdn2.microsoft.com/en-us/library/ms811694.aspx (http://msdn2.microsoft.com/en-us/library/ms811694.aspx) 實作 side - by - side 元件在應用程式共用 http://msdn2.microsoft.com/en-us/library/ms811700.aspx (http://msdn2.microsoft.com/en-us/library/ms811700.aspx) 隔離應用程式和 side - by - side assemblies for Windows XP 如何建置及服務 http://msdn2.microsoft.com/en-us/library/ms997620.aspx (http://msdn2.microsoft.com/en-us/library/ms997620.aspx) 與 . NET Framework 可簡化部署並解決 DLL 衝突 http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx (http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx) . NET Framework 項 o 人員手冊 》: 組件 http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx) Run - Time 動態連結 http://msdn2.microsoft.com/en-us/library/ms685090.aspx (http://msdn2.microsoft.com/en-us/library/ms685090.aspx) 執行緒區域儲存區 http://msdn2.microsoft.com/en-us/library/ms686749.aspx (http://msdn2.microsoft.com/en-us/library/ms686749.aspx) 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。如果您發現錯誤,並想要協助我們進行改善,請填寫本篇文章下方的問卷。 按一下這裡查看此文章的英文版本:815065?
(http://support.microsoft.com/kb/815065/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方
