在vbscript中调用C#dll

在vbscript中调用C#dll,c#,dll,vbscript,qtp,C#,Dll,Vbscript,Qtp,我试图从QTP(使用vbscript)调用一个C#dll。我尝试了很多事情,但都没有成功: VisualStudio2010 创建C#类库(st.dll) 代码: using System; using System.Collections.Generic; using System.Text; namespace st { public class Class1 { public static int GetValue() {

我试图从QTP(使用vbscript)调用一个C#dll。我尝试了很多事情,但都没有成功:

  • VisualStudio2010
  • 创建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的任何见解。

正如Marc所说,但我认为这是一个值得回答的问题。如果您确保您的dll将通过COM机制可用,那么您的脚本应该能够使用诸如CreateObject之类的东西调用它


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

我可以通过执行以下操作来实现此功能:

在VS2010中创建一个新的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,并导致了这个解决方案。干得好

编辑:

我创建了一篇博客文章,详细介绍了步骤并提供了其他信息:


您是否已将其标记为COM可见?我已进入属性>程序集信息并选中“使程序集COM可见”。仍然得到上面的错误。仍然挣扎。。。我删除了“static”关键字,以管理员的身份运行VS 2010,并打开属性>构建>注册COM互操作。对于那些不知道Qtp是什么的人,比如我,这是“快速测试专业”的TLA,这里是这个页面。。。似乎有点谈论它。我使组件COM可见。在QTP/vbs中,我添加了:Dim example Set example=CreateObject(“st.Class1”),但我得到一个错误:ActiveX组件无法创建对象:“st.Class1”我已删除static关键字。同样的问题。有没有关于如何在没有QTP的情况下让一个简单的类以这种方式工作的教程?我正在寻找一个最简单的例子,以了解我需要做什么。这肯定比通过COM要好。:-)我猜
DotNetFactory.CreateInstance()
是QTP独有的吗?