質問

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 を呼び出す方法についての洞察をいただければ幸いです。

役に立ちましたか?

解決

次のようにすることでこれを機能させることができました。

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

他のヒント

マークとして言ったが、私はそれメリット答えだと思います。あなたのDLLがCOM力学しかし利用できるようになりますことを確認する場合は、あなたのスクリプトは、のCreateObjectの

のようなものでそれを呼び出すことができるはずです

<のhref = "http://blogs.msdn.com/jigarme/archive/2008/04/28/how-to-register-net-assembly-for-com-interop.aspx" のrel = "nofollowをnoreferrer ">どのようにCOM相互運用する

のための.NETアセンブリを登録します

あなたの関数は静的です。静的クラスメンバーは、メンバーのインタフェースにまで一致させることができない、そしてそれは、その後、.NETインターフェイスを実装することができないならば、それは確かにCOMインターフェイスを実装していません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top