dirtyCastAndCallOnInterface-MDA
Hinweis
Dieser Artikel gilt für das .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Der dirtyCastAndCallOnInterface
-MDA (Managed Debugging Assistant, Assistent für verwaltetes Debuggen) wird aktiviert, wenn für eine Klassenschnittstelle, die für ausschließlich 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 in die CLR erfolgt
Ursache
Code versucht einen früh gebundenen Aufruf durch eine Vtable über eine Klassenschnittstelle, die nur spät gebunden wird. Beachten Sie, dass Klassenschnittstellen standardmäßig als ausschließlich spät gebunden gekennzeichnet werden. Sie können aber auch mit dem ClassInterfaceAttribute-Attribut mit einem AutoDispatch-Wert ([ClassInterface(ClassInterfaceType.AutoDispatch)]
) als spät gebunden gekennzeichnet werden.
Lösung
Die empfohlene Lösung besteht darin, eine explizite Schnittstelle für die Verwendung durch COM zu definieren und Aufrufe von COM-Clients über diese Schnittstelle erfolgen zu lassen, nicht über die automatisch generierte Klassenschnittstelle. Alternativ kann der Aufruf aus COM über IDispatch
in einen spät gebundenen Aufruf transformiert werden.
Schließlich kann die Klasse auch als AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]
) gekennzeichnet werden, um früh gebundene Aufrufe aus COM zuzulassen. Wegen der unter ClassInterfaceAttribute beschriebenen Versionseinschränkungen wird jedoch dringend davon abgeraten, AutoDual zu verwenden.
Auswirkungen auf die Laufzeit
Dieser MDA hat keine Auswirkungen auf die CLR. Er meldet nur Daten über früh gebundene Aufrufe für spät gebundene Schnittstellen.
Output
Der Name der Methode oder des Felds, auf die oder das über frühe Bindung zugegriffen wird.
Konfiguration
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>