2009-10-15 6 views
1
public int Set(int newValue,Object obj) 
{ 
    //System.Windows.Forms.Control ctrl = (System.Windows.FormsControl)Object; 
} 

L'objet est ici un objet COM. Maintenant, je veux le convertir en un objet .NET et obtenir ses propriétés. Quelle est la meilleure façon de le faire?Convertir l'objet COM en objet .Net

Répondre

0

Vous ne pouvez pas convertir un objet COM dans un objet Windows.Forms.Control directement. Ce n'est pas ce type spécifique.

L'objet COM doit, si vous utilisez la bibliothèque de types correcte, vous fournir ses propres propriétés. Vous devriez être en mesure d'utiliser directement ses propriétés, à condition de les convertir au type approprié.

+0

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

+0

J'utilise vbscript dans QTP pour appeler le .net dll – Learner

0

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.