2009-09-20 4 views
5

Ich versuche, eine C# dll von QTP (verwendet VBScript). Ich habe eine Reihe von Dingen, ohne Erfolg versucht:Calling C# DLL in Vbscript

  • Visual Studio 2010
  • C# Klasse erstellen libary (st.dll)

Code:

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

namespace st 
{ 
    public class Class1 
    { 
     public static int GetValue() 
     { 
      return 34; 
     } 
    } 
} 
  • regasm /codebase st.dll
    • versagt 'weil es keine gültige .NET-Assembly ist'

In QTP/vbscript, ich habe versucht,

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • Nachricht zurück: ‚Ungültiger Prozeduraufruf oder Argument '

Unabhängig von QTP würde ich mich sehr darüber freuen, wie Sie die C# dll aus einer .vbs-Datei aufrufen können.

+0

Haben Sie es als COM-sichtbar markiert? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

Ich habe in den Eigenschaften> Assembly Information und aktiviert 'Make Assembly COM-Visible. Bekomme immer noch die oben genannten Fehler. –

+0

Noch kämpfen ...Ich habe das Schlüsselwort "static" entfernt, VS 2010 als Administrator ausgeführt und Eigenschaften> Erstellen> Für COM-Interop registrieren aktiviert. –

Antwort

8

konnte ich diese Funktion erhalten, indem Sie folgendermaßen vorgehen:

ein neues C# dll in VS erstellen 2010.

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

In QTP habe ich die folgenden Zeilen:

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

Danke an alle, die auf mein Problem reagiert haben. Obwohl ich die COM-Lösung nicht gemacht habe, dachte ich, dass ich bei .NET bleiben könnte und führte zu dieser Lösung. Gute Arbeit alle!

EDIT:

ich einen Blog-Post zum Detail erstellt die Schritte und zusätzliche Informationen:

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

+0

Das ist sicherlich besser als über COM gehen. :-) –

1

Wie Marc sagte, aber ich denke, es verdient eine Antwort. Wenn Sie sicherstellen, dass Ihre DLL durch die COM-Mechanismen verfügbar ist, sollte Ihr Skript in der Lage sein, es mit Dingen wie CreateObject aufrufen.

How to register .NET assembly for COM interop

+0

Ich habe die Baugruppe COM-Sichtbar gemacht. In QTP/Vbs habe ich hinzugefügt: Dim Beispiel Set Beispiel = CreateObject ("st.Class1") Aber ich bekomme einen Fehler: ActiveX-Komponente kann nicht erstellen Objekt: 'st.Class1' –

1

Ihre Funktion ist statisch. Statische Klassenmitglieder können nicht mit Interface-Membern verglichen werden, und wenn sie keine .NET-Schnittstelle implementieren können, wird sie sicherlich keine COM-Schnittstelle implementieren.

+0

Ich habe das statische Schlüsselwort entfernt . Gleiches Problem. Gibt es Tutorials, um eine einfache Klasse ohne QTP auf diese Weise zu arbeiten? Ich suche nach dem einfachsten möglichen Beispiel, um dann zu verstehen, was ich tun muss. –