2009-09-20 7 views
5

J'essaye d'appeler une DLL C# de QTP (utilise vbscript). J'ai essayé un certain nombre de choses sans succès:Appel de C# dll dans vbscript

  • Visual Studio 2010
  • Créer la classe C# 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
    • échoue 'car il est pas un assembly .NET valide'

Dans QTP/vbscript, j'ai essayé

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • message retour: « appel de procédure non valide ou argument '

Indépendamment de QTP, j'apprécierais grandement toute idée sur la façon d'appeler le C# dll à partir d'un fichier .vbs.

+0

Avez-vous marqué comme il COM visible? http://msdn.microsoft.com/en-us/library/ms182157(VS.80).aspx –

+0

Je suis allé dans Propriétés> Informations sur l'assemblage et coché 'Make assembly COM-Visible. Encore obtenir les erreurs ci-dessus. –

+0

Toujours en difficulté ...J'ai supprimé le mot clé "static", j'ai exécuté VS 2010 en tant qu'administrateur et activé Propriétés> Générer> Enregistrer pour COM Interop. –

Répondre

8

j'ai pu obtenir ce travail en procédant comme suit:

Créer une nouvelle dll C# dans VS 2010.

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

En QTP j'ai ajouté les lignes suivantes:

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

Merci à tous ceux qui ont répondu à mon problème. Bien que je n'ai pas fait la solution COM, cela m'a fait penser que je pouvais rester avec .NET et mener à cette solution. Bon travail tout!

EDIT:

J'ai créé un blog en détail les étapes et fournir des informations supplémentaires:

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

+0

C'est certainement mieux que de passer par COM. :-) –

1

Comme l'a dit Marc, mais je pense que cela mérite une réponse. Si vous vous assurez que votre DLL sera disponible grâce à la mécanique COM, votre script devrait être en mesure d'appeler avec des choses comme CreateObject.

How to register .NET assembly for COM interop

+0

J'ai rendu l'ensemble COM-Visible. Dans QTP/vbs j'ai ajouté: Dim exemple Définir exemple = CreateObject ("st.Class1") Mais j'obtiens une erreur: Le composant ActiveX ne peut pas créer d'objet: 'st.Class1' –

1

Votre fonction est statique. Les membres de classes statiques ne peuvent pas être mis en correspondance avec les membres de l'interface, et s'ils ne peuvent pas implémenter une interface .NET, ils n'implémenteront certainement pas une interface COM.

+0

J'ai supprimé le mot-clé statique . Même problème. Existe-t-il des tutoriels sur la façon de faire fonctionner une classe simple de cette manière sans QTP? Je cherche l'exemple le plus simple possible pour comprendre ce que je dois faire. –