6

QTPからC#dllを呼び出そうとしています(vbscriptを使用)。私はいくつかのことを試みましたが成功しませんでした:

  • Visual Studio 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

マークが言ったように、しかし私はそれが答えに値すると思います。COMメカニズムを介してdllが使用可能であることを確認すると、スクリプトはCreateObjectなどを使用してdllを呼び出すことができるはずです。

COM相互運用機能に.NETアセンブリを登録する方法

于 2009-09-20T21:04:58.863 に答える
1

関数は静的です。静的クラスメンバーをインターフェイスメンバーに一致させることはできません。また、.NETインターフェイスを実装できない場合は、COMインターフェイスを実装できません。

于 2009-09-20T21:28:12.490 に答える