我已经编写了一个程序来绘制给定函数的斜率场。

如果我在源代码中插入函数,它就可以正常工作。
但是我想把这个vb6项目转换成一个exe文件。
因为我之前知道会发生这种情况,所以我之前做了一个用于输入函数的字段。该函数将以特殊形式输入。受AutoCAD中一些插件中使用的语言的启发,我创建了这种语言,并将其命名为DiffSol。
所以用户要做的是使用DiffSol语言在字段中编写一个函数。
问题是,它需要是vb中的一个真正的数学函数,才能对不同的x和y进行求值。但我找不到一个策略来将该语言转换为一个可以求值的vb数学函数。
我要做的就是对输入的函数求值15*31次。
这项工作看起来像是做一个编译器。这对我来说似乎真的是一件很难的工作。
有什么想法吗?
发布于 2017-05-06 21:17:11
简单的方法是将其转换为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脚本控件的引用,然后:
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
https://stackoverflow.com/questions/43809383
复制相似问题