Domanda

Sto cercando di trovare il modo più pulito e veloce per chiamare metodi di oggetti COM.

Stavo usando un RCW per l'oggetto ma ogni volta che una nuova versione dell'oggetto COM di terze parti esce le sue modifiche GUID che rendono inutilizzabile RCW, quindi ho dovuto cambiare e iniziare a usare

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

in modo che ogni volta che esce una nuova versione dell'oggetto COM, non devo ricompilare e ridistribuire la mia app.

Al momento sto usando la refelection come mytype.InvokeMemeber ma penso che sia così lento rispetto al solo chiamare il RCW.

In che modo tutti gli altri possono affrontare il problema di modificare versioni di oggetti COM di terze parti, mantenendo comunque la velocità di un RCW?

È stato utile?

Soluzione

Se si desidera semplificare le chiamate in riflessione, è possibile utilizzare VB.NET ed effettuare chiamate in ritardo su una variabile digitata come Oggetto. VB.NET aiuterà con le chiamate alla riflessione. È inoltre possibile impostare un riferimento a Microsoft.VisualBasic.dll ed effettuare anche la chiamata a CallByName per facilitare le chiamate di riflessione.

Tuttavia, è l'IID (il GUID dell'interfaccia) o il GUID della classe che cambia? Se è il GUID di classe che cambia, è possibile definire l'interfaccia una volta, quindi ottenere il tipo tramite una chiamata a GetTypeFromProgID. Una volta ottenuto ciò, puoi passare il tipo al metodo CreateInstance sulla classe Activator e quindi trasmettere all'interfaccia, che non cambierà.

Se l'IID cambia, tuttavia, dovrai sempre utilizzare la riflessione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top