2009-03-04 8 views
2

J'essaie de trouver le moyen le plus propre et le plus rapide pour appeler une méthode d'objets COM.Le moyen le plus rapide d'appeler une méthode d'objets COM sans utiliser de RCW

Je travaillais avec un RCW pour l'objet, mais chaque fois qu'une nouvelle version du tiers objet COM est ses changements de GUID qui rend alors le RCW inutile, donc je devais changer et commencer à utiliser

Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application"); 

de sorte que chaque fois qu'une nouvelle version de l'objet COM sort, je n'ai pas à recomplie et redéployer mon application.

Au moment où j'utilise refelection comme mytype.InvokeMemeber mais je pense qu'il est si lent par rapport à l'appel du RCW.

Comment tout le monde aborde le problème de la modification des versions d'objets COM tiers, tout en maintenant la vitesse d'un RCW?

Répondre

4

Si vous souhaitez faciliter les appels en réflexion, vous pouvez utiliser VB.NET et effectuer des appels en retard sur une variable typée en tant qu'objet. VB.NET aidera avec les appels à la réflexion. Vous pouvez également définir une référence à Microsoft.VisualBasic.dll et effectuer l'appel à CallByName ainsi pour aider avec les appels de réflexion.

Cependant, est-ce le IID (GUID de l'interface) ou le GUID de la classe qui change? Si c'est le GUID de classe qui change, vous pouvez définir l'interface une fois, puis obtenir le type via un appel à GetTypeFromProgID. Une fois que vous avez cela, vous pouvez passer le type à la méthode CreateInstance sur la classe Activator, puis lancer la conversion vers l'interface, qui ne changera pas.

Si le IID change, cependant, vous devrez utiliser la réflexion à chaque fois.

+0

L'utilisation de la liaison tardive VB est-elle plus lente que celle de la réflexion en C#? –

+0

@Nathan W: Non, ce n'est pas le cas. Le mécanisme à son noyau est le même (Réflexion). – casperOne

+0

J'ai découvert que c'est seulement le GUID de la classe qui change, donc la conversion de la méthode interface fonctionne très bien. Merci :) –

Questions connexes