Frage

Ich habe ein Com dll. Einige Methoden erwarten einen Rückrufparameter. Ich habe die interop.mycomlib.dll im Reflektor überprüft:

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

Wie sende ich diesen Parameter? Ich kann keinen Delegierten senden (Zusammenstellungsausnahme). Ich habe versucht zu senden this und erhalten InvalidCastException.

War es hilfreich?

Lösung

Idispatch ist eine COM -Schnittstelle. Der CLR implementiert es automatisch, wenn Sie [comvisible (true)] und [classInterface (classInterfacetype.autodispatch)] in Ihrer Klasse verwenden. Sie können dann eine Instanz der Klasse passieren und die Besetzung wird erfolgreich sein. Der Code wird dann wahrscheinlich eine Art Methode in dieser Klasse aufrufen. Stellen Sie also sicher, dass er implementiert ist. Aus der Frage ist nicht klar, welche Methode die und wie seine Signatur aussehen könnte. Es muss genau übereinstimmen, dass ein Missverhältnis verhindern kann, dass der Rückruf jemals ohne Diagnose auftritt.

Andere Tipps

Sie möchten ein Objekt übergeben, das eine idispatch ist und eine Methode mit einem Dispid von 0 hat Dieser Artikel Um eine Idispatch zu erstellen, geben Sie ihr eine einzelne Methode mit Dispid (0) an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top