2013-05-22 3 views
6

getref를 사용하여 테스트와 관련된 함수 라이브러리에서 함수를 호출하려고합니다. 내 코드 - 함수 라이브러리에서 조치 1변수에서 함수 이름을 가져 와서 함수 라이브러리에있는 함수 (매개 변수 사용)를 호출하는 방법은 무엇입니까?

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

에서

,

Function Function_sample(strMsg) 
    Function_sample = strMsg 
End Function 

I 오류 받고 있어요 -

"Invalid procedure call or argument."

을하지만 기능이있는 경우 잘 작동 동일한 동작에 배치됩니다. 함수 라이브러리에있는 함수 (매개 변수 포함)를 호출하는 방법, 변수에서 함수 이름 가져 오기?

+1

에서

, 라이브러리 (의 포함)에 문제가있을 수 있어야합니다. –

+0

['GetRef'] (http://msdn.microsoft.com/ko-kor/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를 사용하지 않고 직접 (함수 이름으로) 함수를 호출하면 제대로 작동하므로 내 (importing) 함수 라이브러리에 문제가 있다고 생각하지 않습니다. – Saranya

+0

@Saranya - GetRef() 행에서 오류가 발생하는지 확인하십시오. GetRef() 호출을 분리하십시오. 더 많은 코드를 게시하십시오 (QTP에서 라이브러리를 가져 오는 방법은 무엇입니까?). 순서/순서 (라이브러리가로드되기 전에 호출하는 것과 같은)의 문제 일 수 있습니까? –

+1

필자는 함수 라이브러리를 테스트에 연결 했으므로 액션의 다른 함수를 호출 할 수 있습니다. 또한 함수 라이브러리 내에서 getref를 사용하여 함수를 호출하려고 시도했을 때 정상적으로 작동했습니다. 하지만 작업에서 getref를 사용하여 함수를 호출하면 오류가 발생합니다. getref는 지역 함수에서만 작동합니까? – Saranya

2

나는 issue을 직면했으며 기능 라이브러리를 연결하거나로드하는 것이 GetRef에서 작동하지 않는다는 것을 알았습니다. 이 문제를 해결하려면 FL을 연결하거나로드하는 대신에 ExecuteFile 함수를 사용하여 실행하십시오. 일반의 VBScript와 같은 코드 '작동'등의 조치 1

ExecuteFile "/path/functionallibrary.vbs" 
str = "sample" 
msg = "hi" 
x = GetRef("Function_" & str)(msg) 
msgbox x 
관련 문제