2009-09-20 22 views
5

Sto provando a chiamare una DLL C# da QTP (utilizza vbscript). Ho provato un certo numero di cose senza successo:Chiamare C# dll in vbscript

  • Visual Studio 2010
  • Crea classe C# libary (st.dll)

codice:

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

namespace st 
{ 
    public class Class1 
    { 
     public static int GetValue() 
     { 
      return 34; 
     } 
    } 
} 
  • regasm /codebase st.dll
    • fallisce 'perché non è un assembly .NET valido'

In QTP/VBScript, ho cercato

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • Restituisce un messaggio: 'chiamata di routine non valido o argomento '

Indipendentemente dal QTP, apprezzerei molto qualsiasi idea su come chiamare la C# dll da un file .vbs.

+0

Avete segnato come COM-visibile? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

Sono entrato in Proprietà> Informazioni sull'assemblaggio e selezionato 'Rendi assembly COM-Visible. Ancora ottenere gli errori di cui sopra. –

+0

Ancora in difficoltà ...Ho rimosso la parola chiave "statica", ho eseguito VS 2010 come amministratore e attivato Proprietà> Crea> Registra per interoperabilità COM. –

risposta

8

sono stato in grado di ottenere questo lavoro nel modo seguente:

Creare un nuovo C# dll in VS 2010.

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

In QTP ho aggiunto le seguenti righe:

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

Grazie a tutto ciò che ha risposto al mio problema. Anche se non ho fatto la soluzione COM, mi ha fatto pensare che potrei stare con .NET e ha portato a questa soluzione. Buon lavoro a tutti!

EDIT:

ho creato un post sul blog al dettaglio i passi e fornire ulteriori informazioni:

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

+0

È sicuramente meglio che andare via COM. :-) –

1

Come diceva Marc, ma penso che meriti una risposta. Se assicuri che la tua DLL sarà disponibile con i meccanismi COM, lo script dovrebbe essere in grado di chiamarlo con cose come CreateObject.

How to register .NET assembly for COM interop

+0

Ho reso l'assembly COM-Visible. In QTP/vbs ho aggiunto: Esempio dim Esempio di set = CreateObject ("st.Class1") Ma ottengo un errore: componente ActiveX non può creare oggetto: 'st.Class1' –

1

La vostra funzione è statico. I membri delle classi statiche non possono essere associati ai membri dell'interfaccia e, se non è in grado di implementare un'interfaccia .NET, non implementeranno certamente un'interfaccia COM.

+0

Ho rimosso la parola chiave statica . Stesso problema. Ci sono tutorial su come far funzionare una semplice classe in questo modo senza QTP? Sto cercando l'esempio più semplice possibile per capire cosa devo fare. –

Problemi correlati