Delphi 中動態連結庫(DLL)的建立和使用

才智咖 人氣:3.23W
關鍵詞:

 

Delphi 中動態連結庫(DLL)的建立和使用

動態連結庫是一個能夠被應用程式和其它的DLL呼叫的過程和函式的集合體,它裡面包含的是公共程式碼或資源。由於DLL程式碼使用了記憶體共享技術,在某些地方windows也給了DLL一些更高的許可權,因而DLL中可以實現一些一般程式所不能實現的`功能,如實現windows的HOOK、ISAPI等。同時,DLL還為不同語言間程式碼共享提供了一條方便的途徑。因而DLL在程式設計時應用較為廣泛,本文將介紹如何在 Delphi 中建立和使用DLL。

一.DLL 庫記憶體共享機制

從使用效果看,DLL和unit 很像,它們都可以被別的工程模組所呼叫,但二者在內部的實現機制上確存在著差別。如果一個程式模組中用uses語句引用了某個unit,編譯程式在編譯該模組時,便會連同unit一起編譯,並把編譯後的可執行程式碼連結到本程式模組中,這就是一個程式模組能夠呼叫所引用unit中過程和函式的原因。當同一個unit被多個工程所引用時,則每個工程中都含有該unit的可執行程式碼,當含有該unit的多個工程同時執行時,unit的可執行程式碼會隨不同工程而多次被調入記憶體,造成記憶體資源的浪費。DLL則不同,它即使被某個工程呼叫,編譯後仍是獨立的,也就是說編譯後,一個DLL庫形成一個單獨的可執行檔案,而不與任何其它的可執行檔案連線在一起,因而DLL庫並不從屬於某個特定的工程,當多個工程呼叫同一個DLL庫時只有第一個工程把DLL庫調入記憶體,其餘工程並不重複調入同一個DLL庫到記憶體,而是到同一個共享記憶體區讀取。並且,DLL的執行程式碼是在程式執行期間動態調入的,而不是如unit在程式執行時就與整個工程一起調入記憶體。這樣便可消除unit帶來的相同程式碼多處佔用記憶體的弊病。

二 Delphi中DLL庫的建立

在Delphi環境中,編寫一個DLL同編寫一個一般的應用程式並沒有太大的區別。事實上作為DLL主體的DLL函式的編寫,除了在記憶體、資源的管理上有所不同外,並不需要其它特別的手段。    一般工程檔案的格式為:

program   工程標題;

uses     子句;

程式體

而DLLs工程檔案的格式為:

library 工程標題;

uses 子句;

exprots 子句;

程式體

它們主要的區別有兩點: