如何在运行时(Delphi / Windows)中添加代码?

时间:2009-10-13 15:13:14

标签: delphi

我正在使用Windows XP / Delphi 7.我需要在正在运行的程序中添加一些程序(或函数),并且在完成它之后我不想再次重新编译它。

我只有一个带有5个功能的主机应用程序来发送不同类型的警报,但还有其他新警报类型,所以我必须执行新功能来发送这些警报,但我不应该重新构建主机应用程序。我有一个名为TAlarmManager的类,调用它来调用这些函数。

也许是一个插件?好的,但我怎么能“插入”新功能???教程,手册,书籍等..了解这一点,或者有关如何做到这一点的任何建议???

我已经研究了插件(我对这个主题我是全新的),但没有人“谈论”有关向主机应用程序添加功能的问题。在我看来,插件添加了自身的功能,我的意思是,他们已经开发了自我代码来做某事,而不是“添加”代码到主机应用程序......我怎么能这样做?

9 个答案:

答案 0 :(得分:4)

对于技术方面:Delphi IDE如何做到这一点?这将是我第一个看的地方。

要了解插件,您必须了解无法添加新功能。你可以,但由于旧代码不知道如何调用它,它们不会被调用。

所以你要做的就是在插件中添加“注册”或“启动”功能。该start函数将数据结构作为参数进行检查或扩展。在您的情况下,这将是警报列表。警报总是一样(我的猜测),所以它可以添加额外的警报。

然后,在注册所有插件之后,主代码将遍历警报列表并在每个警报上调用标准警报功能。它不再关心每个警报的来源及其真正的作用。

关键在于:您需要定义双方订阅的界面。主代码调用接口函数,插件代码实现它们。

答案 1 :(得分:3)

另一个可用选项是为项目使用脚本组件。效果很好的是PascalScript。这将允许您在事后加载外部脚本,然后根据需要运行它们以与您的应用程序进行交互。正如Aaron所建议的那样,您还需要为脚本提供某种界面,以便与您的应用程序进行交互。

答案 2 :(得分:1)

另请参阅Stackoverflow上的Plugins system for Delphi application - bpl vs dll?

答案 3 :(得分:0)

我不太清楚“闹钟”是什么意思,所以我做了几个假设。

1)如果你不需要额外的警报代码,我会尝试让它们成为数据驱动的。将不同类型的警报保存在数据库或配置文件中,这样可以轻松更新现场应用程序,而无需重新编译或重新安装。

2)如果您需要为每个警报设置特殊代码,则可以将运行时软件包用作应用程序的插件。搜索Delphi运行时包以获得一些想法和教程。以下是我发现的一些链接:

http://delphi.wikia.com/wiki/Creating_Packages

http://delphi.about.com/od/objectpascalide/a/bpl_vs_dll.htm

3)脚本,正如skamradt已经提到的那样。如果它对您的应用程序有意义,这也可以让您的客户编写自己的附加功能,而无需您重新编译。

答案 4 :(得分:0)

你几乎肯定想要使用Pascalscript,正如skamradt建议的那样。你应该从这里开始,并认真考虑这个选项。能够将实时代码序列化为文本有很多可能性。唯一的缺点可能是执行速度,但这对您的应用程序域可能无关紧要。我会赞成skamradt,但我没有足够的声誉来赞成:)

答案 5 :(得分:0)

前段时间我看的情况有点像你所描述的那样。

我的答案是.DLL。我将变量代码放在动态加载的.DLL中,即配置文件中指定的名称。我传递了一份记录,其中包含了解情况的所有内容。

在我的情况下,只有成功/失败的返回和没有屏幕输出,这非常有效。 (它指挥着一件机器。)

答案 6 :(得分:0)

这听起来像是一个脚本语言或“领域特定语言”可能有意义的地方。有几种方法:

  • 在VBscript中实现报警功能(用记事本编写的.vbs文件),通过COM API访问您的Delphi代码。使用COM API,您可以访问大量用于编写函数的编程工具,包括Delphi。这是最笨拙的解决方案,但最容易做到。它也可能对您的销售过程有利,并且考虑如何销售产品总是好的。

  • 在Delphi中实现自己的函数语言。通过这种方式,您可以轻松实现,最终用户可以编写自己的报警功能。如果您将其作为表达式计算器执行,则可以将警报写为2 * T1> T2。有几个表达式评估器,如果它们不符合您的需求,您也可以编写自己的表达式。

  • 在Delphi应用程序中使用预定义的编程语言,例如“Pascal Script”,请参阅http://www.remobjects.com/ps.aspx

答案 7 :(得分:0)

你应该看看PaxCompiler,就像它允许加载脚本的PascalScript一样,但你甚至可以预先编译它们以获得更高的性能。查看演示部分以解决您的问题。

作为旁注,网页看起来真的很糟糕,但是这个包非常强大且稳定。

答案 8 :(得分:0)

我认为脚本解决方案对这种情况有好处 您可以评估许多脚本包:

问候。