delphi – 外部模块实现
为DELPHI应用程序实现外部模块系统的最佳方法是什么?
我真正需要的是非常基本的: >主APP检测模块是否存在并加载(运行时) 我需要在其他表单中使用商店表单,并且只能作为standAlone使用 我用的是这样的东西 if Assigned(pNewClass) then begin Application.CreateForm(pNewClass,_lFrm); _lFrm.Hide; _lFrm.BorderStyle := bsNone; _lFrm.Parent := pBasePNL //(TPanel); _lFrm.Align := alClient; end; 所以我创建了一个TForm,但将它放在TPanel中. 对于DataModules,我通常存储ImageLists,因此ideia是改变应用程序ICO只是改变外部模块. 那么实现这一目标的最佳方法是什么? 看看运行时BPL,但似乎不明白如何做到这一点. 更新:………………………………. 在阅读了一些相关的问题和答案后,我想我找到了答案和解决方案. http://edn.embarcadero.com/article/27178 这篇文章是旧的东西,但非常简单. 那么逻辑就在那里我似乎没有得到它来显示表格? 我只是测试例子2 它加载BPL,但没有得到表单: AClass := GetClass('TForm2'); 总是检索’nil’ 但BPL注册时: RegisterClass(TForm2); 任何人都可以帮助这个. 解决方法
我为你做了一个演示,它很容易上手!但是……开始还没完成.
每次我开始使用插件时,我后来后悔了.但是,正如您所说,您需要一个二进制插件系统.所以BPL是正确的解决方案. David建议使用接口(使用普通的DLL而不是完整的运行时包BPL),这样可以解决一些常见的BPL不稳定性问题,因为不对类进行版本控制,从而解决了应用程序和包 – 二进制兼容性依赖关系,正常.如果您不需要共享内存而不需要使用borlandmm.dll(共享内存管理),那么带有接口的直接DLL将正常工作. 如果你只需编写脚本就可以完成所有工作,并使用脚本制作插件系统,那么就这样做.如果你可以逃脱DLL,接口和没有内存共享,那么使用普通的DLL.如果必须共享内存和类类型,则使用BPL. 请注意,使用BPL(运行时包)会带来许多您可能没有预料到的副作用.我工作过的最大的基于BPL的应用程序比我工作的任何单片应用程序更糟糕,更不稳定.看起来只有在你尝试它们之前才能松开包装,然后我发现,我再次松开了整块石头. 如果你正确使用BPL包,并且正确地对你的插件进行版本化,一切都很好. BPL很棒.但在现实世界中,似乎理智的版本控制和ABI兼容性和互操作性以及稳定性都非常重要. 更新:我为你做了一个演示,它是here(plugin_r2.zip).它是在Delphi XE中完成的,但是如果您使用的是旧版本的delphi,则只需删除.dproj文件并打开主应用程序的.dpr文件和包的.dpk. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |