自從M i c r o s o f t公司推出第一個版本的Wi n d o w s作業系統以來,動態連結程式庫( D L L)一直是這個作業系統的基石。Windows API 中的所有函數都包含在D L L中。3個最重要的D L L是K e r n e l 3 2 . d l l,它包含用於管理記憶體、進程和線程的各個函數; U s e r 3 2 . d l l,它包含用於執行使用者介面任務(如視窗的建立和訊息的傳送)的各個函數; G D I 3 2 . d l l,它包含用於畫圖和顯示文本的各個函數。
Wi n d o w s還配有若干別的D L L,它們提供了用於執行一些特殊任務的函數。例如,A d v A P I 3 2 . d l l包含用於實現對象安全性、註冊表操作和事件記錄的函數, C o m D l g 3 2 . d l l包含常用對話方塊(如File Open和File Save),C o m C t l 3 2 . D L L則支援所有的常用視窗控制項。
為什麼要使用D L L?
• DLL讓應用程式更容易擴充。由於D L L能夠動態地裝入進程的地址空間,因此應用程式能夠在運行時確定需要執行什麼操作,然後裝入相應的代碼,以便根據需要執行這些操作。例如,當一家公司開發了一種產品,想要讓其他公司改進或增強該產品的功能時,那麼就可以使用D L L。
• DLL可以用許多種程式設計語言來編寫。可以選擇手頭擁有的最好的語言來編寫D L L。也許你的應用程式的使用者介面使用Microsoft Visual Basic編寫得最好,但是用C + +來處理它的商務邏輯更好。系統允許Visual Basic程式載入C++ DLL、Cobol DLL和Fortran DLL等。
• DLL有助於節省系統記憶體。如果兩個或多個應用程式使用同一個D L L,那麼該D L L的頁面只需load到記憶體一次,所有的應用程式都可以共用它的各個頁面。C / C + +運行期庫就是個極好的例子。許多應用程式都使用這個庫。如果所有的應用程式都連結到這個靜態庫,那麼s p r i n t f、s t r c p y和m a l l o c等函數的代碼就要多次存在於記憶體中。但是,如果所有這些應用程式連結到DLL C/C++運行期庫,那麼這些函數的代碼就只需要load一次,這意味著記憶體的使用將更加有效。作業系統使用引用計數機制來實現這一點。
• DLL可以更好的進行資源共用。D L L可以包含對話方塊模板、字串、表徵圖和位元影像等資源。多個應用程式能夠使用D L L來共用這些資源。
• DLL有助於應用程式的本地化開發。應用程式常常使用D L L對自己進行本地化。例如,只包含代碼而不包含使用者介面組件的應用程式可以載入包含本地化使用者介面組件的D L L。同樣,可以利用專業的工具對DLL的字串資源進行轉換(比如passola)
•一些特殊的目的。Wi n d o w s使得某些特性只能為D L L所用。例如,只有當D L L中包含某個鉤子(hook)通知函數的時候,才能安裝某些鉤子(使用S e t Wi n d o w s H o o k E x和S e t Wi n E v e n t H o o k來進行安裝)。可以通過建立必須在D L L中生存的C O M對象來擴充Windows Explorer的外殼程式。對於可以由We b瀏覽器載入的、用於建立內容豐富的We b頁的A c t i v e X控制項來說,情況也是一樣.