插件技術的出發點主要是為了讓軟體能夠靈活地進行擴充功能,而不需要對主程式(框架程式)進行重新編譯和發布。它的原理相當簡單。軟體的功能由框架程式和外掛程式決定。在框架程式和插件之間具有一個特定的接口,它們兩者須透過這個接口來傳遞資料或控制訊息,以實現軟體功能。因此,只要符合該介面的程式(或其他功能實體),就稱為該框架程式的插件。
外掛實體一般分為兩種,一種是包含邏輯的程序,例如動態函式庫、Exe程式等;另一種則是一組設定資訊。前一種方式多見於作圖軟體,媒體播放軟體,適合實現複雜的功能;後一種方式多用於實現軟體的Skin(皮膚)功能,以及其他一些不需要進行複雜運算的功能模組(有許多遊戲軟體的關卡也是採用此種方式實現,例如阿達軟體的連連看)。
本篇給出在實作Dll插件方式框架程式的過程中,對Dll進行管理的框架程式及使用例子,作為讀者進行插件程式設計的基礎。具體而言,框架程式需要完成插件的裝載、功能呼叫以及卸載三類功能。
其實每個控制面板程序,都是作業系統的插件。因為每個.cpl檔案就是實作了特定介面的Dll。 Windows的服務程式也是如此,它也只是在原有程式的基礎上處理了特定的windows訊息而已。
其實從廣義上講,每個運行在作業系統上的程式都是作業系統這個軟體的「插件」。
其實在Delphi中,已經有一個插件管理的框架,那就是bpl。採用bpl元件包的方式也可以輕鬆實現功能的插件化擴充。只是該方式有個缺點:不支援其他開發工具(如vb、vc++)進行外掛開發。
)
untDllManager單元中定義了兩個基礎的類別:
TDll:所有Dll類別的父類,提供了裝載、卸載的相關操作;
TDllManager:Dll類別的容器類別。支援刪除元素方式卸載Dll實體。
以下為類別圖: