6

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

在行动1

str = "sample"
msg = "hi"
x = GetRef("Function_"&str)(msg)
msgbox x

在函数库中,

Function Function_sample(strMsg)
    Function_sample = strMsg
End Function

我收到错误消息-

“无效的过程调用或参数。”

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

4

2 回答 2

5

简约的工作示例:

库.vbs:

Option Explicit

Function Twice(n)
  Twice = n + n
End Function

主要.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)

输出:

cscript main.vbs
84

错误消息“...运行时错误:无效的过程调用或参数:'GetRef'”表明(导入)函数库是罪魁祸首。

更新:

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

n = Twice(11)

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

但是根据thisthat,至少有四种方法可以将库/模块“导入”到QTP中,并且由于我不使用QTP,我不能排除这些方法中的一些(甚至全部)会做一些事情愚蠢地导致您描述的不当行为。

于 2013-05-23T13:18:42.550 回答
2

我遇到了同样的问题,发现关联或加载功能库不适用于GetRef. 要解决此问题,您需要做的就是使用ExecuteFile函数执行它,而不是关联或加载您的 FL。

在行动1

ExecuteFile "/path/functionallibrary.vbs"
str = "sample"
msg = "hi"
x = GetRef("Function_" & str)(msg)
msgbox x
于 2017-01-25T13:51:52.583 回答