So senden Sie einen Ereignisrückrufparameter an ein COM -Objekt mit .NET
-
23-10-2019 - |
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
.
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.