Pregunta

Estoy tratando de encontrar la forma más limpia y rápida de llamar a los métodos de objetos COM.

Estaba usando un RCW para el objeto, pero cada vez que aparece una nueva versión del objeto COM de terceros, sus cambios de GUID hacen que el RCW sea inútil, así que tuve que cambiar y comenzar a usar

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

para que cada vez que salga una nueva versión del objeto COM no tenga que volver a implementar y volver a implementar mi aplicación.

En este momento estoy usando refelection como mytype.InvokeMemeber pero siento que es muy lento en comparación con solo llamar al RCW.

¿Cómo abordan todos los demás el problema de cambiar las versiones de objetos COM de terceros, pero manteniendo la velocidad de un RCW?

¿Fue útil?

Solución

Si desea hacer que las llamadas en reflexión sean más fáciles, puede usar VB.NET y hacer llamadas tardías en una variable escrita como Objeto. VB.NET ayudará con las llamadas a la reflexión. También puede establecer una referencia a Microsoft.VisualBasic.dll y realizar la llamada a CallByName para ayudar con las llamadas de reflexión.

Sin embargo, ¿es el IID (el GUID de interfaz) o el GUID de clase que cambia? Si es el GUID de clase el que cambia, puede definir la interfaz una vez y luego obtener el Tipo a través de una llamada a GetTypeFromProgID. Una vez que tenga eso, puede pasar el tipo al método CreateInstance en la clase Activator y luego enviarlo a la interfaz, que no cambiará.

Si el IID cambia, sin embargo, tendrá que usar la reflexión cada vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top