2009-09-20 59 views
5

QTPからC#DLLを呼び出そうとしています(vbscriptを使用)。ノー成功で多くのことを試してみました:vbscriptでC#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

    • のVisual Studio 2010
    • C#クラスlibary(st.dll)

    コードを作成します。

    • は、QTP/VBScriptで

'は有効な.NETアセンブリではありませんので、'、私は

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • を試してみましたが、失敗したメッセージを返します:「無効なプロシージャコールをか引数 '

QTPに関係なく、.vbsファイルからc#dllを呼び出す方法についての洞察を深く感謝します。

+0

あなたはCOM-見えるとして、それをマークしたことがありますか? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

プロパティ>アセンブリ情報に行き、「アセンブリをCOM-可視にする」にチェックを入れました。それでも上記のエラーが発生します。 –

+0

まだ苦労しています...私は '静的'キーワードを削除し、VS 2010をadminとして実行し、プロパティ>ビルド> COM Interopの登録を有効にしました。 –

答えて

8

私は、次の手順を実行して、この作業を取得することができました:

VS 2010 QTPで

namespace st4 
{ 
    public class st4_functions 
    { 
     public int GetValue() 
     { 
      return 34; 
     } 
    } 
} 

の新しいC#のDLLを作成、私は次の行を追加:

Set obj = DotNetFactory.CreateInstance("st4.st4_functions", "c:\\st4.dll") 
MsgBox obj.GetValue() 

私の問題に答えるすべての人に感謝します。私はCOMソリューションをやっていませんでしたが、私は.NETにとどまり、このソリューションを導くことができると考えました。すべての良い仕事!

EDIT:

私は細部へのステップをブログ記事を作成し、追加情報を提供しています。

http://www.solutionmaniacs.com/blog/2012/5/29/qtp-calling-c-dll-in-vbscript.html

+0

これは確かにCOMを経由するよりも優れています。 :-) –

1

マークさんが言ったように、私は答えが良いと思います。あなたのDLLがCOMメカニックを通して利用可能になることを保証すれば、あなたのスクリプトはCreateObjectのようなものでそれを呼び出すことができるはずです。

How to register .NET assembly for COM interop

+0

アセンブリをCOM-Visibleにしました。 QTP/VBで私は追加しました: Dim example Set Example = CreateObject( "st.Class1") しかし、私はエラーが発生します:ActiveXコンポーネントはオブジェクトを作成できません: 'st.Class1' –

1

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

+0

staticキーワードを削除しました。 。同じ問題。単純なクラスをQTPなしでこのように動作させるためのチュートリアルはありますか?私は、私がする必要があることを理解することが可能な最も簡単な例を探しています。 –

関連する問題