执行存储在字符串中的函数
Executing functions stored in a string
假设我的 Delphi 应用程序中有一个功能:
MsgBox
并且有一个包含 MsgBox
的字符串。
我知道你们大多数人会说这是可能的,但我认为这是可能的,因为我使用资源编辑器打开了编译后的 exe(使用 delphi XE2 编译),并且那个资源编辑器是为 Delphi 构建的。在那里,我可以看到 most 我写的代码,就像我写的那样。因此,由于变量名称、函数名称等在编译期间没有更改,因此应该有一种方法可以从字符串中执行函数,但是如何呢?任何帮助将不胜感激。
编辑:
我想做的是创建一个简单的 interpreter/scripting 引擎。这就是它的工作原理:
有两个文件,scr.txt和arg.txt
scr.txt 包含:
msg_show
0
arg.txt 包含:
"Message"
现在让我解释一下 0 是什么:
- 首先,scr.txt的第一行是函数名
- 第二行告诉它的参数在arg.txt中的哪一行,即0告诉"Message"是msg_show的参数。
我希望我的问题现在很清楚了。
I want to make a simple scripting engine.
为了执行存储为文本的任意代码,您需要编译器或解释器。您需要自己编写一个,或者嵌入一个已经存在的。实际上,后一种选择是您的最佳选择。有一些可用的数字,但在我看来很难看过去 dwscript。
我想我已经解决了我的问题!答案在 this 问题的第一个答案中。
编辑:
但是,至于第一条评论中提到的问题的解决方法,我有一个非常简单的解决方案。
您不需要将 all 和 arguments/parameters 传递给它。以我为例:
如问题中所述,您有两个文件。现在您需要执行这些文件。就是这么简单:
阅读 scr.txt
的第一行
检查它是否是一个函数。如果没有,跳过行
如果是,请阅读下一行,它告诉索引它的参数在 arg.txt
中的位置
将索引(整数)传递给 "Call" 函数。
现在对于必须执行的函数,它应该知道它需要多少个参数。即 2
假设函数是 "Sum(a,b : integer)"。它需要 2 个参数
现在让函数从 arg.txt.
读取两个参数
完成了!
希望对大家有所帮助
我可以得到一些代表 :)
假设我的 Delphi 应用程序中有一个功能:
MsgBox
并且有一个包含 MsgBox
的字符串。
我知道你们大多数人会说这是可能的,但我认为这是可能的,因为我使用资源编辑器打开了编译后的 exe(使用 delphi XE2 编译),并且那个资源编辑器是为 Delphi 构建的。在那里,我可以看到 most 我写的代码,就像我写的那样。因此,由于变量名称、函数名称等在编译期间没有更改,因此应该有一种方法可以从字符串中执行函数,但是如何呢?任何帮助将不胜感激。
编辑:
我想做的是创建一个简单的 interpreter/scripting 引擎。这就是它的工作原理:
有两个文件,scr.txt和arg.txt
scr.txt 包含:
msg_show 0
arg.txt 包含:
"Message"
现在让我解释一下 0 是什么:
- 首先,scr.txt的第一行是函数名
- 第二行告诉它的参数在arg.txt中的哪一行,即0告诉"Message"是msg_show的参数。
我希望我的问题现在很清楚了。
I want to make a simple scripting engine.
为了执行存储为文本的任意代码,您需要编译器或解释器。您需要自己编写一个,或者嵌入一个已经存在的。实际上,后一种选择是您的最佳选择。有一些可用的数字,但在我看来很难看过去 dwscript。
我想我已经解决了我的问题!答案在 this 问题的第一个答案中。
编辑:
但是,至于第一条评论中提到的问题的解决方法,我有一个非常简单的解决方案。
您不需要将 all 和 arguments/parameters 传递给它。以我为例:
如问题中所述,您有两个文件。现在您需要执行这些文件。就是这么简单:
阅读 scr.txt
的第一行
检查它是否是一个函数。如果没有,跳过行
如果是,请阅读下一行,它告诉索引它的参数在 arg.txt
中的位置
将索引(整数)传递给 "Call" 函数。
现在对于必须执行的函数,它应该知道它需要多少个参数。即 2
假设函数是 "Sum(a,b : integer)"。它需要 2 个参数
现在让函数从 arg.txt.
读取两个参数
完成了!
希望对大家有所帮助
我可以得到一些代表 :)