Assistant Débogage managé dirtyCastAndCallOnInterface
L'Assistant Débogage managé (MDA, Managed Debugging Assistant) dirtyCastAndCallOnInterface est activé lorsqu'une tentative d'appel à liaison anticipée par un vtable est effectuée sur une interface de classes qui a été marquée comme étant à liaison tardive uniquement.
Symptômes
Une application lève une violation d'accès ou a un comportement imprévisible lorsqu'un appel à liaison anticipée est placé via COM dans le CLR.
Cause
Le code tente un appel à liaison anticipée par un vtable via une interface de classes qui est à liaison tardive uniquement. Notez que, par défaut, les interfaces de classes sont identifiées comme étant à liaison tardive uniquement. Elles peuvent également être identifiées comme étant à liaison tardive avec l'attribut ClassInterfaceAttribute avec une valeur AutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).
Solution
La résolution recommandée consiste à définir une interface explicite destinée à être utilisée par COM et à faire appeler les clients COM via cette interface plutôt que via l'interface de classes générée automatiquement. L'appel de COM peut également être transformé en appel à liaison tardive via IDispatch.
Enfin, il est possible d'identifier la classe comme AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]) pour permettre aux appels à liaison anticipée d'être placés par COM ; toutefois, l'utilisation de AutoDual est fortement déconseillée en raison des limitations de versioning décrites dans ClassInterfaceAttribute.
Effet sur le runtime
Ce MDA n'a aucun effet sur le CLR. Il signale uniquement des données relatives aux appels à liaison anticipée sur les interfaces à liaison tardive.
Sortie
Le nom de la méthode ou le nom du champ en cours d'accès à liaison anticipée.
Configuration
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>
Voir aussi
Référence
Concepts
Diagnostic d'erreurs avec les Assistants de débogage managés