如何在VB中调用函数名称引用字符串值的函数

时间:2010-04-13 13:18:57

标签: vb6

我想在VB6上实现这个算法。

Sub Main()
dim stringVal1 as string, stringVal2 as string
dim getOne as boolean

stringVal1 = "FunctOne"
stringVal2 = "FunctTwo"

if getOne then
    'Call Function with function name assigned to stringVal1 ... how to call the function here?**
else
    'Call Function with function name assigned to stringVal1 ... how to call the function here?**
end if

End Sub


Function FunctOne()
   Msgbox "I'm function one"
End Function

Function FunctTwo()
   Msgbox "I'm function two"
End Function

可以在VB6中完成吗?

3 个答案:

答案 0 :(得分:9)

通常,此类代码模式指向软件设计中的错误。

在极少数情况下,确实需要这样做, CallByName 可以实现这一目标。

示例:

Call CallByName(Me, "NameOfFunction", vbMethod, arguments)

答案 1 :(得分:0)

如果您提供有关您需要通过其名称的字符串表示形式调用函数的原因的更多信息,将会有所帮助。你能不能简单地重写这样的代码:

If getOne Then 
    Call FuncOne()
Else 
    Call FuncTwo() 
End If

答案 2 :(得分:0)

通常,您不希望基于字符串实际调度。这很容易出错(因为你必须在运行时确定你的String有你想要的函数名),而且真的没必要。你希望能够“传入”你想要使用的方法的方法就是使用VB所拥有的多态,并为每个实现使用一个单独的类。

在您用于界面的类模块中,例如名为Unknown top-level key in JSON request : group...

MyInterface

然后,创建两个类模块,每个模块用于接口的每个可能实现:

Public Sub DoStuff() End Sub

MyClassOne

然后,在Implements MyInterface Public Sub MyInterface_DoStuff() Msgbox "I'm function one" End Sub ,同样的事情,但与你的其他实现:

MyClassTwo

要使用它,您只需传递要使用的实现:

Implements MyInterface
Public Sub MyInterface_DoStuff()
    Msgbox "I'm function two"
End Sub

您需要改为存储Private Sub UseInterface(WhichThingToUse as MyInterface) WhichThingToUse.DoStuff End Sub New MyClassOne,而不是使用String变量来存储要使用的方法。您没有展示如何设置New MyClassTwo变量,但无论逻辑是什么,您只需要更改为存储MyInterface的实例,并直接使用它。

要在MSDN库中进一步阅读: