2013-05-22 78 views
6

我試圖使用getref從與測試相關的函數庫中調用一個函數。 我的代碼 -如何調用函數庫中的函數(帶參數),從變量中獲取函數名稱?

在動作1

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

在函數庫,

Function Function_sample(strMsg) 
    Function_sample = strMsg 
End Function 

我得到的錯誤 -

"Invalid procedure call or argument."

但如果功能正常工作被放置在同一個動作中。 如何調用函數庫中的函數(帶參數),從變量中獲取函數名稱?

+1

爲你的代碼「作品」作爲一個普通的VBScript中,都必須有您(含)的庫問題。 –

+0

我不認爲['GetRef'](http://msdn.microsoft。com/en-us/library/ekabbe10)以簡單的VBScript工作。 –

+4

@AnsgarWiechers - 當然是,請參閱下面的答案。 –

回答

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我不能排除,一些(甚至全部)這些方法會做一些愚蠢的事情,導致你描述的錯誤行爲。

+0

我不認爲有我的(導入)功能庫有問題,因爲它可以正常工作,如果我直接(通過函數名稱)調用函數而不使用getref。 – Saranya

+0

@Saranya - 驗證錯誤發生在GetRef()行;隔離GetRef()調用;發佈更多你的代碼(你如何在QTP中導入一個庫?);它可能是序列/順序的問題(就像在圖書館加載之前調用)? –

+1

我已將函數庫與我的測試關聯起來,並且可以從操作中調用其他函數。另外,當我嘗試在函數庫中使用getref調用函數時,它工作正常。但是當我從動作中使用getref調用函數時,我得到錯誤。 getref只適用於本地功能嗎? – Saranya

2

我面臨同樣的issue,發現關聯或加載功能庫不適用於GetRef。要解決這個問題,你需要做的就是代替關聯或加載你的FL,使用ExecuteFile函數執行它。

在動作1

ExecuteFile "/path/functionallibrary.vbs" 
str = "sample" 
msg = "hi" 
x = GetRef("Function_" & str)(msg) 
msgbox x 
相關問題