2009-10-13 33 views
3

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

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

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

我学习过插件(我对这个主题完全陌生),但没有人会谈到将函数添加到主机应用程序。在我看来,插件添加了自身的功能,我的意思是,它们是用自编码开发来做的,而不是将代码“添加”到主机应用程序中......我该怎么做?

回答

4

技术方面:Delphi IDE如何做到这一点?那将是我首先看的地方。

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

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

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

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

+0

非常感谢我的朋友,非常有用! – Yulien 2009-10-14 13:02:39

3

可用的另一个选项是在项目中使用脚本组件。一个工作得很好的是PascalScript。这将允许您在事实之后加载外部脚本,然后根据需要运行它们以与应用程序交互。正如Aaron所建议的,您还需要为您的脚本提供某种接口来与应用程序进行交互。

0

我不太清楚“警报”是什么意思,所以我做了一些假设。

1)如果你不需要额外的警报代码,我会尽量让它们数据驱动。将不同类型的警报保存在数据库或配置文件中,这样可以轻松更新现场的应用程序而无需重新编译或重新安装。 2)如果你需要每个闹钟的特殊代码,你可以使用运行时包作为应用程序的插件。搜索Delphi运行时软件包以获取一些想法和教程。这里有几个链接,我发现:

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

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

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

0

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

0

前段时间我正在寻找一种类似于你所描述的情况。

我的答案是.DLLs。我将变量代码放入一个动态加载的.DLL中,该名称在配置文件中指定。我通过了一个记录,包含了我所知道的有关情况的一切。

在我的情况下,只有成功/失败的回报,没有屏幕输出,这工作得很好。 (这是指挥一部机器。)

0

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

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

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

  • 使用预定义的编程语言,你的Delphi应用程序中,例如,“Pascal脚本”,看到http://www.remobjects.com/ps.aspx

0

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

作为一个方面说明,网页看起来确实很糟糕,但是这个包真的很强大和稳定。

相关问题