Le fait que l'objet en question soit un objet COM n'est pas un problème. Vous n'avez pas besoin de le convertir en un objet .NET car il en est déjà un. Vous obtenez la main des propriétés sur cet objet comme tout autre objet .NET pour lequel vous ne disposait pas d'informations de type, par exemple:
var objectType = obj.GetType();
foreach(var prop in objectType.GetProperties())
{
Console.WriteLine("Property {0} of type {1}",
prop.Name, prop.PropertyType.Name);
}
Pour appeler une propriété, vous pouvez utiliser la méthode InvokeMember du type classe. Voici comment définir la propriété « Visible » (si elle existe) sur votre objet à true
:
objectType.InvokeMember("Visible", BindingFlags.SetProperty,
null, obj, new object[] { true });
Si vous utilisez .NET 4 ou 4.5, vous pouvez utiliser le mot-clé dynamique pour rendre le travail COM origine objets .NET plus facile:
var xlAppType = Type.GetTypeFromProgID("Excel.Application");
dynamic xlApp = Activator.CreateInstance(xlAppType);
xlApp.Visible = true;
Notez comment l'invocation de la propriété visible était sans incantatoire dans ce dernier exemple. J'essaie d'utiliser la dynamique autant que possible pour travailler avec des objets COM de nos jours.
Définir obj1 = SwfWindow ("Form1"). SwfObject ("radioGroup"). Objet Définir obj = DotNetFactory.CreateInstance ("QTCustServer.RadioGroupSrv1", "C: .... Mes documents/Visual Studio 2005/Projets /QuickTestCustomServer2/bin/CustServer.dll ") obj.Set 20, obj1 ... ici obj1 est l'objet COM que je passe à la méthode Set. Je sais que c'est un contrôle de radioGroup mais je ne peux pas le lancer directement comme vous l'avez dit. Quel serait le type approprié pour le lancer? – Learner
J'utilise vbscript dans QTP pour appeler le .net dll – Learner