exe改造
1.在項目dpr文件中引用mybean.console單元。
uses mybean.console;
2.在程序初始化時加載插件
program Main;
uses
Vcl.Forms,
mybean.console,
Unit_Main in 'Unit_Main.pas' {Form1},
UIShowAsNormal in '..\interface\UIShowAsNormal.pas';
{$R *.res}
begin
Application.Initialize;
//方法1自動加載:該函數(shù)調(diào)用后默認(rèn)根據(jù)同目錄下的[plug-ins\*.plug-ins]或者[*.plug-ins]配置文件內(nèi)的信息加載DLL文件。
ApplicationContextInitialize;
//方法2手動加載:該方法為手動指定需要加載的DLL文件。
ExecuteLoadLibFiles('plugins\*.dll');
ExecuteLoadLibFiles('plugins\*.bpl');
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
3.定義一個接口文件,將需要共享的操作以接口方式調(diào)用。
unit UIShowAsNormal;
interface
type
IShowForm = interface
['{DC71A10B-7EC2-45D8-B2D7-17D78D193C90}']
procedure ShowAsNoraml;stdcall;
procedure ShowAsMdi;stdcall;
end;
IMainPlugCom =interface
['{CE4DF363-A5A3-4013-A27C-2A3C4F15E3EB}']
procedure Receive(msg:PChar);stdcall;
procedure Send(msg:PChar);stdcall;
end;
implementation
end.
4.在窗口初始化時將自身放入全局變量,方便其它DLL調(diào)用。
procedure TForm1.FormCreate(Sender: TObject);
begin
//設(shè)置全局變量
TMyBeanFactoryTools.SetObject('main',Self);
end;
2019/02/21 補充
需要在窗口單元引用mybean.tools.beanFactory單元才能調(diào)用上面函數(shù)。
5.修改窗口調(diào)用的代碼為。
procedure TForm1.Button3Click(Sender: TObject);
var
showf:IShowForm;
begin
//將IShowForm對象賦值給showf
showf := TMyBeanFactoryTools.GetBean('plug1') as IShowForm;
//調(diào)用IShowForm的ShowAsNoraml方法顯示窗體。
showf.ShowAsNoraml;
end;