dirtyCastAndCallOnInterface-MDA
Der dirtyCastAndCallOnInterface-MDA (Managed Debugging Assistant, Assistent für verwaltetes Debuggen) wird aktiviert, wenn für eine Klassenschnittstelle, die ausschließlich für späte Bindung gekennzeichnet ist, ein früh gebundener Aufruf über eine Vtable erfolgt.
Symptome
Eine Anwendung löst eine Zugriffsverletzung aus oder zeigt unerwartetes Verhalten, wenn ein früh gebundener Aufruf über COM an die CLR erfolgt.
Ursache
Im Programmcode wird ein früh gebundener Aufruf über eine Vtable per Klassenschnittstelle versucht, die nur spät gebunden wird. Beachten Sie, dass Klassenschnittstellen standardmäßig als ausschließlich spät gebunden gekennzeichnet sind. Sie können auch mit dem ClassInterfaceAttribute-Attribut mit einem AutoDispatch-Wert ([ClassInterface(ClassInterfaceType.AutoDispatch)]) als spät gebunden gekennzeichnet sein.
Lösung
Zur Lösung wird empfohlen, eine explizite Schnittstelle für die Verwendung von COM zu definieren und Aufrufe von COM-Clients über diese Schnittstelle erfolgen zu lassen, nicht über die automatisch generierte Klassenschnittstelle. Wahlweise kann der Aufruf aus COM über IDispatch in einen spät gebundenen Aufruf umgewandelt werden.
Schließlich kann die Klasse auch als AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]) gekennzeichnet werden, um früh gebundene Aufrufe aus COM zuzulassen. Aufgrund der unter ClassInterfaceAttribute beschriebenen Versionseinschränkungen wird jedoch dringend von der Verwendung von AutoDual abgeraten.
Auswirkungen auf die Laufzeit
Dieser MDA hat keine Auswirkungen auf die CLR. Es werden nur Angaben über früh gebundene Aufrufe für spät gebundene Schnittstellen gemeldet.
Output
Der Name der Methode oder des Felds, auf die bzw. das der früh gebundene Zugriff erfolgt.
Konfiguration
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>
Siehe auch
Referenz
Konzepte
Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen