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自动加载:该函数调用后默认根据同目录下的[plug-ins\*.plug-ins]或者[*.plug-ins]配置文件内的信息加载DLL文件。
ApplicationContextInitialize;
//方法2手动加载:该方法为手动指定需要加载的DLL文件。
ExecuteLoadLibFiles('plugins\*.dll');
ExecuteLoadLibFiles('plugins\*.bpl');
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
3.定义一个接口文件,将需要共享的操作以接口方式调用。
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调用。
procedure TForm1.FormCreate(Sender: TObject);
begin
//设置全局变量
TMyBeanFactoryTools.SetObject('main',Self);
end;
2019/02/21 补充
需要在窗口单元引用mybean.tools.beanFactory单元才能调用上面函数。
5.修改窗口调用的代码为。
procedure TForm1.Button3Click(Sender: TObject);
var
showf:IShowForm;
begin
//将IShowForm对象赋值给showf
showf := TMyBeanFactoryTools.GetBean('plug1') as IShowForm;
//调用IShowForm的ShowAsNoraml方法显示窗体。
showf.ShowAsNoraml;
end;
网友评论