dirtyCastAndCallOnInterface MDA
Kommentar
Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.
Den dirtyCastAndCallOnInterface
hanterade felsökningsassistenten (MDA) aktiveras när ett tidigt bundet anrop via en vtable görs på ett klassgränssnitt som endast har markerats som sent bundet.
Symtom
Ett program utlöser en åtkomstöverträdelse eller har ett oväntat beteende när ett tidigt anrop via COM placeras i CLR.
Orsak
Kod försöker utföra ett tidigt anrop via en vtable via ett klassgränssnitt som endast är sent bundet. Observera att klassgränssnitt som standard endast identifieras som sent bundna. De kan också identifieras som senbundna med ClassInterfaceAttribute attributet med ett AutoDispatch värde ([ClassInterface(ClassInterfaceType.AutoDispatch)]
).
Åtgärd
Den rekommenderade lösningen är att definiera ett explicit gränssnitt för användning av COM och låta COM-klienterna anropa via det här gränssnittet i stället för via det automatiskt genererade klassgränssnittet. Alternativt kan anropet från COM omvandlas till ett sent bundet anrop via IDispatch
.
Slutligen är det möjligt att identifiera klassen som ([ClassInterface(ClassInterfaceType.AutoDual)]
) för att tillåta att tidiga bundna anrop placeras från COM, men användningen AutoDual av avskräcks starkt på grund av de versionsbegränsningar som AutoDual beskrivs i ClassInterfaceAttribute.
Effekt på körningen
Denna MDA har ingen effekt på CLR. Den rapporterar endast data om tidiga anrop i senbundna gränssnitt.
Output
Namnet på metoden eller namnet på fältet som används tidigt.
Konfiguration
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>