如何评估用户在visual basic 6 exe中输入的任意数学函数?

时间:2017-05-05 16:05:55

标签: string math vb6

我制作了一个程序,用于绘制给定函数的斜率字段。

img

如果我在源代码中插入函数,它的工作正常。

但我想把这个vb6项目变成一个exe文件。

因为我知道之前会发生这种情况,所以我之前做了一个输入功能的字段。该功能将以特殊形式输入。受AutoCAD中某些添加语言的启发,我制作了这种语言,并将其命名为DiffSol。

所以用户要做的是使用DiffSol语言在字段中编写一个函数。

问题在于它需要是vb中的一个真正的数学函数,以便针对不同的x和y进行评估。但我找不到将该语言转换为可以评估的vb数学函数的策略。

我要做的就是评估输入的功能15 * 31次。

这项工作看起来像是在制作编译器。这对我来说似乎很难。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

简单的方法是将其转换为VBScript或JScript。

创建一个包含用VB编写的函数的类:

' +(a,b)
public function ADD(a as double, b as double) as double
    add = a + b
end function

'/(a,b)
public function DIV(a as double, b as double) as double
    div = a / b
end function

添加对Microsoft Script Control的引用:

Dim scr As ScriptControl: Set scr = New ScriptControl
scr.Language = "VBScript"

'// allow the script access to the class with the functions
scr.AddObject "DS", new diffsolClass

expr = " +(200, c(/(+(2,6), 2))) "

'//parse with simple substitution
parsed = expr
parsed = Replace$(parsed, "/", "DS.DIV")
parsed = Replace$(parsed, "+", "DS.ADD")
parsed = Replace$(parsed, "c", "cos") '//built in already

'//for some valid VB: DS.ADD(200, cos(DS.DIV(DS.ADD(2,6), 2))) 

'//run it
MsgBox scr.Eval(parsed)

返回199.346356379136