简单的任务: 我想制作一个程序(parent.exe)。有三个按钮。当我单击Button1时,出现Form1;按钮2,Form2出现时;当Button3,Form3出现时......
Form1,Form2,Form3存储在三个不同的dll中(Form1dll.dll,Form2dll.dll,Form3dll.dll)。
我想让父程序(parent.exe)运行模块化。我计划添加和删除dll,但Parent.exe要求所有dll都存在,否则会发生异常。
我该如何解决这个问题?
感谢名单
以下是来自parent.exe的代码:
procedure ShowForm1;stdcall;external 'Project1dll.dll' name 'ShowForm1';
procedure ShowForm2;stdcall;external 'Project2.dll' name 'ShowForm2';
procedure ShowForm3;stdcall;external 'Project3.dll' name 'ShowForm3';
var
ParentForm: TParentForm;
implementation
{$R *.DFM}
procedure TParentForm.Button1Click(Sender: TObject);
begin
ShowForm1;
end;
procedure TParentForm.Button2Click(Sender: TObject);
begin
ShowForm2;
end;
procedure TParentForm.Button3Click(Sender: TObject);
begin
ShowForm3;
end;
答案 0 :(得分:5)
你设置它的方式,程序在加载时查找DLL。你需要的是将DLL设置为插件。看一下JVCL中的JVPlugin框架。它正是你想要的。
答案 1 :(得分:4)
是的,可以让EXE使用LoadLibrary和GetProcAddress动态加载DLL。有关示例,请参阅http://www.scalabium.com/faq/dct0130.htm。
接下来,您可能遇到其他问题,因为内存管理器和类型不在EXE和不同的DLL之间共享。您可能需要格外小心以避免这些问题或寻找解决方案。与runtime packages/BPLs或special memory managers一样。