6

我正在尝试从 QTP 调用 C# dll(使用 vbscript)。我尝试了很多没有成功的事情:

  • 视觉工作室 2010
  • 创建 C# 类库 (st.dll)

代码:

using System;
using System.Collections.Generic;
using System.Text;   

namespace st
{
    public class Class1
    {
        public static int GetValue()
        {
            return 34;
        }
    }
}
  • regasm /codebase st.dll
    • 失败,因为它不是有效的 .NET 程序集

在 QTP/vbscript 中,我尝试过

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • 返回消息:'无效的过程调用或参数'

无论 QTP 是什么,我都非常感谢有关如何从 .vbs 文件调用 c# dll 的任何见解。

4

3 回答 3

9

我能够通过执行以下操作来完成此工作:

在 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

于 2009-09-21T05:29:07.213 回答
1

正如马克所说,但我认为它值得回答。如果您确保您的 dll 通过 COM 机制可用,您的脚本应该能够使用CreateObject之类的东西调用它。

如何为 COM 互操作注册 .NET 程序集

于 2009-09-20T21:04:58.863 回答
1

您的功能是静态的。静态类成员不能匹配接口成员,如果它不能实现.NET接口,那么它肯定不会实现COM接口。

于 2009-09-20T21:28:12.490 回答