Question

J'essaie de trouver le moyen le plus propre et le plus rapide d'appeler une méthode d'objet COM.

J'utilisais un RCW pour l'objet, mais chaque fois qu'une nouvelle version de l'objet COM tiers publie ses modifications de GUID, ce qui rend le RCW inutile, je devais donc changer et commencer à utiliser

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

afin que, chaque fois qu'une nouvelle version de l'objet COM apparaît, je n'ai pas besoin de me conformer ou de redéployer mon application.

Pour le moment, j'utilise la refection comme mytype.InvokeMemeber , mais j'estime que c'est tellement lent comparé à un simple appel au RCW.

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

Était-ce utile?

La solution

Si vous souhaitez faciliter les appels en réflexion, vous pouvez utiliser VB.NET et effectuer des appels en retard sur une variable de type Object. 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 de CallByName afin de faciliter les appels de réflexion.

Cependant, est-ce que c'est l'IID (le GUID d'interface) ou le GUID de classe qui change? S'il s'agit du GUID de la classe qui change, vous pouvez alors 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 de la classe Activator puis transtyper vers l'interface, ce qui ne changera pas.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top