Domanda

Ho un riferimento a un DLL COM. Alcuni metodi si aspettano un parametro di callback. Ho controllato l'interop.MyComLib.dll riflettore:

public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack);

Come faccio a inviare questo parametro? Non è possibile inviare un delegato (eccezione compilation). Ho provato l'invio this e InvalidCastException ricevuto.

È stato utile?

Soluzione

IDispatch è un'interfaccia COM. Il CLR verrà automaticamente attuarlo se si usa [ComVisible (true)] e [ClassInterface (ClassInterfaceType.AutoDispatch)] attributi di classe. È quindi possibile passare un'istanza della classe e il cast avrà successo. Il codice viene poi probabilmente andando a chiamare un qualche tipo di metodo su quella classe in modo da assicurarsi che sia implementata. Non è chiaro dalla domanda quale metodo che potrebbe essere e ciò che la sua firma dovrebbe essere simile. Si deve corrispondere esattamente, una mancata corrispondenza è responsabile per evitare che il callback si verifichi mai, senza una diagnosi.

Altri suggerimenti

Si vuole passare a un oggetto che è un IDispatch e ha un metodo con un DISPID di 0. Vedere questo articolo per come creare un IDispatch, poi dare un unico metodo con DISPID (0).

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