抱歉由於上次開源比較匆忙,沒有來的及做一個DEMO,裡面也有些垃圾的文件沒有及時清理。DEMO其實昨天晚上已經調通。相關說明文檔今天晚上才說明好,歡迎大家繼續關注和交流,和大家一起分享我10多年的管理軟件框架開發經驗,後續會完善更多相應的有用的插件,供大家直接使用。
編譯好的文件打包存放於根目錄下面,文件名為:MDI-DEMO-BIN.zip,采用XE5編譯,使用標准控件,其他版本編譯myBeanConsole.exe和plugin-demo-form工程就好,記得這兩個工程需要帶包,beanMananger.dll可以通用。不需要編譯。
myBeanConsole.exe
--主控台EXE,包含主窗體(帶包編譯)
myBeanConsole.config.ini
--配置文件,包含是否使用緩存目錄,是否預加載DLL,等配置
demoBeans.plug-ins
-- bean的配置文件,可以多個,有主配置文件指定目錄(可以通配符),參考主配置文件說明
beanManager.dll
-- 框架核心DLL文件,由plug-ins-core\beanMananger提供,標志的Windows DLL文件,不需要帶包編譯,所有Delphi版本可以使用。
rtl190.bpl
vcl190.bpl
--XE5 運行包文件(由於使用XE5編譯的)
plug-ins\plugin_form_demo.dll
-- DEMO DLL(帶包編譯),注冊了aboutForm插件和demoPluginForm插件
主配置文件文件名: EXE文件名+config.ini,或者app.config.ini
[main]
;加載時插件緩存(放入臨時目錄)
;true時copy到臨時緩存目錄進行加載, false插件目錄進行加載
;默認為true值
plug-ins-cache=1
;插件臨時目錄,支持相對路徑(EXE目錄的相對路徑),絕對路徑(c:\temp\
;默認為plug-ins-cache
plug-ins-cache-path=temp-files
;加載DLL在啟動程序的時候
;默認為true
loadOnStartup=0
;加載bean配置文件目錄(相對路徑(EXE目錄的相對路徑),絕對路徑(c:\config\*.*)
;沒有配置時,直接加載DLL,從DLL中獲取PluginID
;<none>時不加載任何DLL插件
beanConfigFiles=*.plug-ins,plug-ins\*.plug-ins,beanConfig\*.plug-ins
;加載文件時記錄日志;
;默認為false, 為true時可以從日志文件(log\loadDLL_trace.txt)便於查看到哪個文件加載失敗
traceLoadLib=1
配置文件可以單個也可以多個,存放路徑由主配置文件指定
beanConfigFiles=*.plug-ins,plug-ins\*.plug-ins,beanConfig\*.plug-ins
上面配置指定了根目錄的*.plug-ins文件和plug-ins目錄下的*.plug-ins文件…
這樣便於多人協作編寫模塊,文件采用JSON格式。
格式與說明
{
list:
[
{
"id":"frame-core",
"pluginID":"frame-core", //如果與id一致可以進行忽略(同一個插件可以配置成多種bean)
"lib":"plug-ins\\plugin-demo-form.dll", //文件名<插件存放的DLL文件>
"singleton":true, //是否單件模式(比如遠程數據訪問插件,可以單件模式)
}
]
}
工程文件(提供了插件的注冊,也可以寫到窗體文件的initialize部分)
library plugin_form_demo; uses SysUtils, Classes, uBeanFactory, ufrmAbout in '..\..\Forms\ufrmAbout.pas' {frmAbout}, ufrmPluginForm in '..\..\Forms\ufrmPluginForm.pas' {frmPluginForm}, uBasePluginForm in '..\..\Service\uBasePluginForm.pas'; {$R *.res} begin beanFactory.RegisterBean('aboutForm', TfrmAbout); beanFactory.RegisterBean('demoPluginForm', TfrmPluginForm); end.
ufrmPluginForm.pas,很簡單新建一個vclForm,然後把TForm改成了TBasePluginForm(實現了IpluginForm的窗體類)
type TfrmPluginForm = class(TBasePluginForm) mmo1: TMemo; pnlOperator: TPanel; btnCreateAsModal: TButton; procedure btnCreateAsModalClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
考慮了下,還是新建個群,方便討論
群:205486036
源代碼地址
https://git.oschina.net/ymofen/delphi-framework-MyBean