Share via


dirtyCastAndCallOnInterface-MDA

Aktualisiert: November 2007

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.

Ausgabe

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

Konzepte

Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen

Referenz

ClassInterfaceAttribute

Weitere Ressourcen

Interoperabilität