J’essaie d’appeler une dll C # à partir de QTP (utilise vbscript). J’ai essayé un certain nombre de choses sans succès:
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
Dans QTP / vbscript, j’ai essayé
extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
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.