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

时间:2013-05-22 12:08:29

标签: vbscript qtp

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

在行动1

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

在函数库中,

Function Function_sample(strMsg)
    Function_sample = strMsg
End Function

我收到了错误 -

  

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

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

2 个答案:

答案 0 :(得分:5)

简约工作示例:

<强> Lib.vbs:

Option Explicit

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

<强> 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)

<强>输出:

cscript main.vbs
84

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

<强>更新

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

n = Twice(11)

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

但根据thisthat,至少有四种方法可以将库/模块“导入”QTP,而则因为我不使用QTP I不能排除,这些方法中的一些(甚至全部)做了一些愚蠢的事情来导致你描述的错误行为。

答案 1 :(得分:2)

我遇到了同样的issue,发现关联或加载功能库并不适用于trenutnoStanjeTB.Text = !String.IsNullOrWhiteSpace(f2.Passvalue) ? f2.Passvalue : trenutnoStanjeTB.Text; DinEuLab1.Text = !String.IsNullOrWhiteSpace(f2.Passvalue2) ? f2.Passvalue2 : DinEuLab1.Text; 。要解决此问题,您只需要关联或加载FL,而不是使用#!/bin/bash declare -a namesArray=("name1","name2","name3") inserts="" for i in "{arr[@]}" do inserts+="INSERT INTO persons(id, name) VALUES (0,'$i');" done echo $inserts | dbaccess yourDataBase 函数执行它。

在行动1

GetRef