Appel de la dll C # dans vbscript

J’essaie d’appeler une dll C # à partir de QTP (utilise vbscript). J’ai essayé un certain nombre de choses sans succès:

  • Visual Studio 2010
  • Créer la bibliothèque de classe C # (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 ce n’est pas un assembly .NET valide’

Dans QTP / vbscript, j’ai essayé

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • Renvoie le message: ‘Appel ou argument de procédure non valide’

Indépendamment de QTP, j’apprécierais beaucoup de savoir comment appeler la dll c # à partir d’un fichier .vbs.

J’ai pu obtenir ce travail en procédant comme suit:

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

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

Dans 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 restr avec .NET et a conduit à cette solution. Bon travail à tous!

MODIFIER:

J’ai créé un article de blog pour détailler les étapes et fournir des informations supplémentaires:

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

Comme l’a dit Marc, mais je pense que cela mérite une réponse. Si vous vous assurez que votre dll sera disponible par le biais de la mécanique COM, votre script devrait pouvoir y appeler des éléments tels que CreateObject .

Comment enregistrer un assemblage .NET pour COM interop

Votre fonction est statique. Les membres de classe statiques ne peuvent pas être mis en correspondance avec les membres d’interface, et s’il ne peut pas implémenter une interface .NET, il ne mettra certainement pas en œuvre une interface COM.