2

我想知道是否可以从 C# 调用 VBScript 中的函数。让我试着澄清一下。我正在使用自动化另一个应用程序的应用程序(Quick Test Professional 或“QTP”),主要使用 VBScript。通过插件模型,可以通过将插件写入作为 .NET 程序集的测试应用程序 (QTP) 来扩展测试功能。基本工作流程是 VBScript 测试自动化测试应用程序,并且可以在可扩展性添加程序集中调用类上的方法来做更复杂的事情。这部分工作正常。

我想知道的是我的 C# 代码(在程序集中的可扩展性添加中)是否可以回调 VBScript 中的函数。我不认为测试应用程序框架(QTP)明确支持这一点,所以我想知道是否有任何方法可以使用标准互操作技术来做到这一点。我正在考虑使用 GetRef() 来获取对感兴趣的 VBScript 函数的引用,将其作为参数传递给我在可扩展性插件中调用的方法(我怀疑即使在这一点上我也会遇到编组问题?)然后在我的可扩展性添加的 C# 代码中,以某种方式调用此对象的方法;这是我完全迷失的地方(因为如果没有反射中通常使用的必要类型信息,我不知道如何做到这一点)。

我认为这可能是不可能的,但如果是这样的话,我想确认一下。

谢谢!

4

3 回答 3

2

最后不是那么难,但发现它更难在 vbscript set a=getref 在 c# 中将 ref 声明为对象 https://community.saas.hpe.com/t5/Unified-Functional-Testing/C-compile-即时通过 dotnetfactory/mp/1611299#M22811

private object _UFTCallBackFunction = null;

 public int callMeBack2()
 {
 string[] retParts = {"Yep this is value 1"};
 _UFTCallBackFunction.GetType().InvokeMember("", 
  System.Reflection.BindingFlags.InvokeMethod, null, 
_UFTCallBackFunction, retParts);
 return 0;
 }

 public void InitUFTCallBack(object UFTCallBackFunction)
 {
 _UFTCallBackFunction = UFTCallBackFunction;
 }

然后在vbs

Set oCallMe = GetRef("CallMeBackWithAParameter")
oTestCom.InitUFTCallBack(oCallMe)
oTestCom.callMeBack2()
Function callMeBackWithAParameter(P1)
 print "I wass called back from C# having value " & P1
End Function
于 2017-08-28T20:56:29.143 回答
0

VBScript如何调用C#代码?我怀疑它真的是在调用QTP,而QTP是在调用C#代码。在这种情况下,只有 QTP 可能会回调 VBScript。

在什么情况下你的 C# 代码会回调?我怀疑 VBScript 可以异步回调。

于 2009-06-25T16:31:02.717 回答
0

那是个硬汉。

您可能想尝试在 .NET 组件的 VBScript 端编写一个事件处理程序,并在您希望调用该函数时在 .NET 端引发一个事件。

请注意,它甚至可能不起作用,因为它实际上取决于 QTP 的脚本引擎。即使它应该,如果它成为一种挫折练习,也不要感到惊讶。

请参阅有关 WSH 和事件处理的示例http://msdn.microsoft.com/en-us/library/ms974564.aspx同样,这可能不适用于 QTP,但它可以让您了解解决问题的潜在方法.

编辑:附加链接可能有帮助也可能没有帮助!

http://www.west-wind.com/presentations/dotnetfromVfp/DotNetFromVfp_EventHandling.asp

于 2009-06-25T16:45:13.360 回答