简约的工作示例:
库.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() 失败。
但是根据this和that,至少有四种方法可以将库/模块“导入”到QTP中,并且由于我不使用QTP,我不能排除这些方法中的一些(甚至全部)会做一些事情愚蠢地导致您描述的不当行为。