2009-09-20 9 views
5

Próbuję wywołać dll C# z QTP (używa vbscript). Próbowałem wielu rzeczy, bez powodzenia:Wywoływanie C# dll w vbscript

  • Visual Studio 2010
  • Utwórz C# klasa libary (st.dll)

Kod:

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

namespace st 
{ 
    public class Class1 
    { 
     public static int GetValue() 
     { 
      return 34; 
     } 
    } 
} 
  • regasm /codebase st.dll
    • nie 'ponieważ nie jest to prawidłowy montaż .NET'

W QTP/VBScript, próbowałem

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • Zwraca komunikat: „Nieprawidłowe wywołanie procedury lub Argument "

Bez względu na QTP, byłbym bardzo wdzięczny za wszelkie informacje na temat wywoływania C# dll z pliku .vbs.

+0

Czy oznaczony jako COM-widoczne? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

Poszedłem do Właściwości> Informacje o zespole i zaznaczono opcję "Utwórz COM-Visible". Nadal dostaję powyższe błędy. –

+0

Nadal walczę ...Usunąłem słowo kluczowe "statyczne", uruchomiłem VS 2010 jako administrator i włączyłem Właściwości> Kompilacja> Zarejestruj się w COM Interop. –

Odpowiedz

8

udało mi się uzyskać tej pracy, wykonując następujące czynności:

Utwórz nowy C# dll w VS 2010.

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

W QTP I dodaje następujące linie:

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

Dziękuję wszystkim, którzy odpowiedzieli na mój problem. Chociaż nie korzystałem z rozwiązania COM, pomyślałem, że mogę zostać z .NET i doprowadziłem do tego rozwiązania. Dobra robota!

EDIT:

stworzyłem blogu o szczegóły kroki i zapewnić dodatkowe informacje:

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

+0

To z pewnością lepsze niż przejście przez COM. :-) –

1

Jak powiedział Marc, ale myślę, że zasługuje na odpowiedź. Jeśli upewnisz się, że biblioteka dll będzie dostępna przez mechanikę COM, Twój skrypt powinien mieć możliwość wywoływania go przy pomocy rzeczy takich jak CreateObject.

How to register .NET assembly for COM interop

+0

Zrobiłem montaż COM-Visible. W QTP/vbs dodałem: Dim example Przykładowy zestaw = CreateObject ("st.Class1") Ale pojawia się błąd: komponent ActiveX nie może utworzyć obiektu: 'st.Class1' –

1

Twoja funkcja jest statyczny. Statyczni członkowie klasy nie mogą być dopasowani do członków interfejsu, a jeśli nie mogą zaimplementować interfejsu .NET, to z pewnością nie będą implementować interfejsu COM.

+0

Usunąłem słowo kluczowe static . Taki sam problem. Czy istnieją jakieś samouczki dotyczące uzyskiwania prostej klasy do pracy w ten sposób bez QTP? Szukam najprostszego możliwego przykładu, aby następnie zrozumieć, co muszę zrobić. –