执行存储在字符串中的函数

Posted

技术标签:

【中文标题】执行存储在字符串中的函数【英文标题】: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 的参数。

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

【问题讨论】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

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

以上是关于执行存储在字符串中的函数的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中执行存储为字符串的函数

c语言字符串中的代码怎么执行?

Python可执行对象——execevalcompile

Python可执行对象——execevalcompile

MySQL存储过程执行慢

JS 预解释相关理解