我试图从QTP调用C#dll(使用vbscript)。我尝试了很多事情没有成功:
代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace st
{
public class Class1
{
public static int GetValue()
{
return 34;
}
}
}
regasm /codebase st.dll
在QTP / vbscript中,我试过
extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
无论QTP如何,我都非常感谢如何从.vbs文件中调用c#dll。
答案 0 :(得分:8)
我能够通过以下方式实现这一目标:
在VS 2010中创建一个新的C#dll。
namespace st4
{
public class st4_functions
{
public int GetValue()
{
return 34;
}
}
}
在QTP中,我添加了以下几行:
Set obj = DotNetFactory.CreateInstance("st4.st4_functions", "c:\\st4.dll")
MsgBox obj.GetValue()
感谢所有回应我的问题。虽然我没有做COM解决方案,但它让我觉得我可以继续使用.NET并导致这个解决方案。干得好!
修改强>
我创建了一篇博文,详细介绍了这些步骤并提供了其他信息:
http://www.solutionmaniacs.com/blog/2012/5/29/qtp-calling-c-dll-in-vbscript.html
答案 1 :(得分:1)
正如马克所说,但我认为这是值得回答的。如果您确保通过COM机制可以使用您的dll,那么您的脚本应该可以使用 CreateObject 之类的东西调用它。
答案 2 :(得分:1)
你的功能是静态的。静态类成员无法与接口成员匹配,如果它无法实现.NET接口,那么它肯定不会实现COM接口。