加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 外部模块实现

发布时间:2020-12-15 09:31:14 所属栏目:大数据 来源:网络整理
导读:为DELPHI应用程序实现外部模块系统的最佳方法是什么? 我真正需要的是非常基本的: 主APP检测模块是否存在并加载(运行时) 模块可以存储表单 模块可以存储DataModule 模块可以存储代码 我需要在其他表单中使用商店表单,并且只能作为standAlone使用 我用的是这
为DELPHI应用程序实现外部模块系统的最佳方法是什么?

我真正需要的是非常基本的:

>主APP检测模块是否存在并加载(运行时)
>模块可以存储表单
>模块可以存储DataModule
>模块可以存储代码

我需要在其他表单中使用商店表单,并且只能作为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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读