Jlo*_*uro 5 delphi resources plugins module bpl
为DELPHI应用程序实现外部模块系统的最佳方法是什么?
我真正需要的是非常基本的:
我需要在其他表单中使用商店表单,并且只能作为standAlone使用
我用的是这样的东西
if Assigned(pNewClass) then begin
Application.CreateForm(pNewClass, _lFrm);
_lFrm.Hide;
_lFrm.BorderStyle := bsNone;
_lFrm.Parent := pBasePNL //(TPanel);
_lFrm.Align := alClient;
end;
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个TForm,但将它放在TPanel中.
对于DataModules,我通常存储ImageLists,因此ideia是改变应用程序ICO只是改变外部模块.
那么实现这一目标的最佳方法是什么?
看看运行时BPL,但似乎不明白如何做到这一点.谢谢.
更新:.....................................
在阅读了一些相关的问题和答案后,我想我找到了答案和解决方案.
http://edn.embarcadero.com/article/27178
这篇文章是旧的东西,但非常简单.
那么逻辑就在那里我似乎没有得到它来显示表格
我只是测试例子2
它加载BPL,但没有得到表单:
AClass := GetClass('TForm2');
Run Code Online (Sandbox Code Playgroud)
总是检索'nil'
但BPL注册时:
RegisterClass(TForm2);
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助这个.
War*_* P 3
我给你做了一个演示,上手非常简单!然而……开始并没有结束。
每次我开始使用插件,后来我都后悔了。但是,正如您所说,您需要一个二进制插件系统。所以 BPL 是正确的解决方案。David 建议使用接口(使用普通 DLL,而不是完整的运行时包 BPL),这将解决由于不对类进行版本控制而导致的一些常见的 BPL 不稳定问题,以及应用程序和包二进制兼容性依赖项,适当地。如果您不需要共享内存,也不需要使用 borlandmm.dll(共享内存管理),那么带有接口的直接 DLL 就可以正常工作。
如果您只需编写脚本就可以完成所需的所有操作,并仅使用脚本来创建您的插件系统,那么就这样做。如果您可以摆脱 DLL、接口并且无需内存共享,那么就使用普通 DLL。如果必须共享内存和类类型,那么可以使用 BPL。
请注意,使用 BPL(运行时包)会带来许多您可能没有预料到的副作用。与我开发过的任何单体应用程序相比,我开发过的最大的基于 BPL 的应用程序更加混乱且不稳定。似乎只有在你尝试过之后才可能渴望软件包,然后我发现,我再次渴望单体。
如果您正确使用 BPL 包,并且正确版本化您的插件,那么一切都会很好。BPL 很棒。但在现实世界中,健全的版本控制、ABI 兼容性、互操作性以及稳定性似乎非常重要。
更新:我为 您制作了一个演示(plugin_r2.zip)。它是在 Delphi XE 中完成的,但如果您使用的是较旧版本的 delphi,则只需删除 .dproj 文件并打开主应用程序的 .dpr 文件和包的 .dpk 即可。
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |