dirtyCastAndCallOnInterface MDA
Notitie
Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.
De dirtyCastAndCallOnInterface
beheerde foutopsporingsassistent (MDA) wordt geactiveerd wanneer een vroege aanroep via een vtable wordt uitgevoerd op een klasse-interface die alleen als laat gebonden is gemarkeerd.
Symptomen
Een toepassing genereert een toegangsschending of heeft onverwacht gedrag bij het plaatsen van een vroege aanroep via COM in de CLR.
Oorzaak
Code probeert een vroege aanroep via een vtable via een klasse-interface die alleen te laat gebonden is. Standaard worden klasse-interfaces aangeduid als alleen te laat gebonden. Ze kunnen ook worden geïdentificeerd als laat gebonden aan het ClassInterfaceAttribute kenmerk met een AutoDispatch waarde ([ClassInterface(ClassInterfaceType.AutoDispatch)]
).
Oplossing
De aanbevolen oplossing is om een expliciete interface te definiëren voor gebruik door COM en de COM-clients te laten aanroepen via deze interface in plaats van via de automatisch gegenereerde klasse-interface. U kunt de aanroep van COM ook omzetten in een te late oproep via IDispatch
.
Ten slotte is het mogelijk om de klasse te identificeren als AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]
) om vroege gebonden aanroepen vanuit COM toe te staan; het gebruik AutoDual wordt echter sterk afgeraden vanwege de beperkingen voor versiebeheer die worden beschreven in ClassInterfaceAttribute.
Effect op de runtime
Deze MDA heeft geen effect op de CLR. Er worden alleen gegevens gerapporteerd over vroege aanroepen op late afhankelijke interfaces.
Uitvoer
De naam van de methode of naam van het veld dat vroeg gebonden wordt geopend.
Configuratie
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>