程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 動態鏈接庫編程(一)

動態鏈接庫編程(一)

編輯:Delphi

10.1 Windows的動態鏈接庫原理 

  動態鏈接庫(DLLs)是從C語言函數庫和Pascal庫單元的概念發展而來的。所有的C語言標准庫函數都存放在某一函數庫中,同時用戶也可以用LIB程序創建自己的函數庫。在鏈接應用程序的過程中,鏈接器從庫文件中拷貝程序調用的函數代碼,並把這些函數代碼添加到可執行文件中。這種方法同只把函數儲存在已編譯的.OBJ文件中相比更有利於代碼的重用。

  但隨著Windows這樣的多任務環境的出現,函數庫的方法顯得過於累贅。如果為了完成屏幕輸出、消息處理、內存管理、對話框等操作,每個程序都不得不擁有自己的函數,那麼Windows程序將變得非常龐大。Windows的發展要求允許同時運行的幾個程序共享一組函數的單一拷貝。動態鏈接庫就是在這種情況下出現的。動態鏈接庫不用重復編譯或鏈接,一旦裝入內存,Dlls函數可以被系統中的任何正在運行的應用程序軟件所使用,而不必再將DLLs函數的另一拷貝裝入內存。 

10.1.1 動態鏈接庫的工作原理 

  “動態鏈接”這幾字指明了DLLs是如何工作的。對於常規的函數庫,鏈接器從中拷貝它需要的所有庫函數,並把確切的函數地址傳送給調用這些函數的程序。而對於DLLs,函數儲存在一個獨立的動態鏈接庫文件中。在創建Windows程序時,鏈接過程並不把DLLs文件鏈接到程序上。直到程序運行並調用一個DLLs中的函數時,該程序才要求這個函數的地址。此時Windows才在DLLs中尋找被調用函數,並把它的地址傳送給調用程序。采用這種方法,DLLs達到了復用代碼的極限。

  動態鏈接庫的另一個方便之處是對動態鏈接庫中函數的修改可以自動傳播到所有調用它的程序中,而不必對程序作任何改動或處理。

  DLLs不僅提供了函數重用的機制,而且提供了數據共享的機制。任何應用程序都可以共享由裝入內存的DLLs管理的內存資源塊。只包含共享數據的DLLs稱為資源文件。如Windows的字體文件等。 

10.1.2 Windows系統的動態鏈接庫 

  Windows本身就是由大量的動態鏈接庫支持的。這包括Windows API函數 ( KRNLx86.EXEUSER.EXEGDI.EXE,…),各種驅動程序文件,各種帶有.Fon.Fot 擴展名的字體資源文件等。Windows還提供了針對某一功能的專用DLLs,如進行DDE編程的ddeml.dll,進行程序安裝的ver.dll等。

  雖然在編寫Windows程序時必然要涉及到DLLs,但利用Delphi ,用戶在大部分時候並不會注意到這一點。這一方面是因為Delphi提供了豐富的函數使用戶不必直接去使用Windows API;另一方面即使使用Windows API,由於DelphiAPI函數和其它Windows DLLs函數重新組織到了幾個庫單元中,因而也不必使用特殊的調用格式。所以本章的重點放在編寫和調用用戶自定義的DLLs上。

  使用傳統的Windows編程方法來創建和使用一個DLLs是一件很令人頭痛的事,正如傳統的Windows編程方法本身就令人生畏一樣

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved