2009-09-20 19 views
5

Estoy tratando de llamar a un dll C# de QTP (usa vbscript). He intentado varias cosas sin éxito:Llamando a C# dll en vbscript

  • Visual Studio 2010
  • Crear C# libary clase (st.dll)

código:

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

namespace st 
{ 
    public class Class1 
    { 
     public static int GetValue() 
     { 
      return 34; 
     } 
    } 
} 
  • regasm /codebase st.dll
    • falla 'porque no es un ensamblado válido .NET'

En QTP/VBScript, he tratado mensaje

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • devoluciones: 'llamada de procedimiento no válido o argumento '

Independientemente de QTP, agradecería cualquier información sobre cómo llamar a la cllll desde un archivo .vbs.

+0

Ha marcado como COM-visible? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

He entrado en Propiedades> Información de ensamblaje y he marcado 'Hacer ensamblado COM-Visible. Aún recibes los errores anteriores –

+0

Todavía luchando ...Eliminé la palabra clave "estática", ejecuté VS 2010 como administrador y activé Propiedades> Compilar> Registrarse para COM Interop. –

Respuesta

8

que era capaz de conseguir este trabajo de la siguiente manera:

Crear un nuevo C# DLL en VS 2010.

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

En QTP he añadido las siguientes líneas:

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

Gracias a todos los que respondieron a mi problema. Aunque no hice la solución COM, me hizo pensar que podía quedarme con .NET y conducirme a esta solución. Buen trabajo todo!

EDIT:

he creado una entrada en el blog al detalle los pasos para proporcionar información adicional:

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

+0

Eso es ciertamente mejor que ir a través de COM. :-) –

1

Como dijo Marc, pero creo que merece una respuesta. Si se asegura de que su dll estará disponible a través de la mecánica COM, su script debería poder invocarlo con cosas como CreateObject.

How to register .NET assembly for COM interop

+0

Hice el conjunto COM-Visible. En QTP/VBS He añadido: Dim ejemplo ejemplo Set = CreateObject ("st.Class1") pero me da un error: el componente ActiveX no puede crear el objeto: 'st.Class1' –

1

Su función es estática. Los miembros de la clase estática no pueden coincidir con los miembros de la interfaz, y si no puede implementar una interfaz .NET, ciertamente no implementará una interfaz COM.

+0

he quitado la palabra clave static . El mismo problema. ¿Hay algún tutorial sobre cómo hacer que una clase simple funcione de esta manera sin QTP? Estoy buscando el ejemplo más simple posible para luego entender lo que tengo que hacer. –