如何调用函数库中的函数(带参数),从变量中获取函数名?

Sar*_*nya 6 vbscript qtp

我正在尝试使用getref从与测试关联的函数库中调用函数.我的代码 -

在行动1

str = "sample"
msg = "hi"
x = GetRef("Function_"&str)(msg)
msgbox x
Run Code Online (Sandbox Code Playgroud)

在函数库中,

Function Function_sample(strMsg)
    Function_sample = strMsg
End Function
Run Code Online (Sandbox Code Playgroud)

我收到了错误 -

"无效的过程调用或参数."

但是如果函数放在同一个动作中,它可以正常工作.如何调用函数库中的函数(带参数),从变量中获取函数名?

Ekk*_*ner 5

简约的工作示例:

Lib.vbs:

Option Explicit

Function Twice(n)
  Twice = n + n
End Function
Run Code Online (Sandbox Code Playgroud)

Main.vbs:

Option Explicit

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

ExecuteGlobal goFS.OpenTextFile(".\lib.vbs").ReadAll()

Dim fpTwice : Set fpTwice = GetRef("Twice")

WScript.Echo fpTwice(42)
Run Code Online (Sandbox Code Playgroud)

输出:

cscript main.vbs
84
Run Code Online (Sandbox Code Playgroud)

错误消息"...运行时错误:无效的过程调用或参数:'GetRef'"表示(导入)函数库是责备.

更新:

认为假设VBScript引擎保持一个表将子/函数/方法名称与可调用代码相关联以便能够进行文字/直接调用是合理的:

n = Twice(11)
Run Code Online (Sandbox Code Playgroud)

并且GetRef("Twice")访问此表.因此,当文字调用成功时,我永远不会期望间接/'函数指针'调用或GetRef()失败.

但根据这个那个,至少有四种方法可以将库/模块"导入"QTP,而且由于我不使用QTP,我不能排除这些方法中的一些(甚至全部)做某事愚蠢地导致你描述的错误行为.

  • @Saranya - GetRef()适用于Global/Public函数/ subs*和*甚至适用于本地/私有函数. (2认同)
  • @Saranya - 不是通过菜单关联FL,而是使用`ExecuteFile`然后`GetRef`将起作用. (2认同)