【问题标题】:Executing functions stored in a string执行存储在字符串中的函数
【发布时间】:2015-03-01 04:52:48
【问题描述】:

假设我的 Delphi 应用程序中有一个函数:

MsgBox 并且有一个字符串,其中包含MsgBox

我知道你们大多数人会说这是可能的,但我认为这是可能的,因为我使用资源编辑器打开了已编译的 exe(使用 delphi XE2 编译),并且该资源编辑器是为 Delphi 构建的。在那,我可以看到我写的大部分代码,就像我写的一样。因此,由于变量名称、函数名称等在编译期间没有更改,因此应该有一种方法可以从字符串执行函数,但是如何?任何帮助将不胜感激。


编辑:

我想做的是创建一个简单的解释器/脚本引擎。这就是它应该如何工作的:

有两个文件,scr.txt和arg.txt

  • scr.txt 包含:

    msg_show 0
  • arg.txt 包含:

    “消息”

现在让我解释一下 0 是什么:

  • 首先,scr.txt的第一行是函数名
  • 第二行表示它的参数在 arg.txt 中的哪一行,即 0 表示“消息”是 msg_show 的参数。

我希望我的问题现在很清楚了。

【问题讨论】:

  • 是的,这样做是可能的,但你到底为什么要这样做呢?
  • @JensBorrisholt,想想脚本、soap 服务、存储在数据库中的名称等。
  • @LURD 你说得对。但我想我会等待 nafees
  • 节省您的时间并使用现有的。 Delphi Webscript fx code.google.com/p/dwscript

标签: string function delphi execution


【解决方案1】:

我想做一个简单的脚本引擎。

为了执行存储为文本的任意代码,您需要编译器或解释器。要么你需要自己写一个,要么嵌入一个已经存在的。实际上,后一种选择是您的最佳选择。有一个可用的数字,但在我看来很难看过去dwscript

【讨论】:

    【解决方案2】:

    我想我已经解决了我的问题!答案在this 问题的第一个答案中。

    编辑:
    但是,对于第一条评论中提到的问题的解决方法,我有一个非常简单的解决方案。
    您不需要将参数/参数传递给它所有。以我为例:
    如问题中所述,您有两个文件。现在您需要执行这些文件。就这么简单:
    读取 scr.txt 的第一行
    检查它是否是一个函数。如果没有,请跳过该行
    如果是,请阅读下一行,它告诉索引它的参数在 arg.txt 中的位置
    将索引(整数)传递给“调用”函数。
    现在对于必须执行的函数,它应该知道它需要多少个参数。即 2
    假设函数是“Sum(a,b : integer)”。它需要 2 个参数
    现在让函数从 arg.txt 中读取两个参数。
    完成了!
    希望对大家有帮助。
    我可以得到一些代表:)

    【讨论】:

    • 如果字符串包含采用不同数量参数的函数名称会发生​​什么?还是有不同的类型?根据任何人的定义,脚本引擎将支持的不仅仅是函数调用。它将支持分支和循环,以及函数的创建。它会有某种形式的 I/O。
    • 还请记住,允许您的用户在您的程序中调用任意函数会允许他们破坏您的程序。您需要对用户的代码进行沙箱处理。小心限制其范围。
    • 对评论1的回答:我已经找到了解决该数量参数的方法。
    • 答案不包含任何信息。仅链接的答案对未来的访问者没有用处。不管怎样,听起来你已经决定在这里走自己的路了。祝你好运!
    • 您认为世界上谁会容忍使用您设计的这种简陋的“脚本语言”进行编码?这很糟糕,只会作为竞争对手的卖点。
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多