Partager via


Assistant Débogage managé dirtyCastAndCallOnInterface

Remarque

Cet article est spécifique au .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.

L'Assistant Débogage managé (MDA) dirtyCastAndCallOnInterface est activé quand 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 inattendu quand 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 à l'aide de l'attribut ClassInterfaceAttribute défini à la valeur AutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Ré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 aussi être changé 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. L'utilisation de AutoDual est toutefois fortement déconseillée en raison des limitations du contrôle de version décrites dans ClassInterfaceAttribute.

Effet sur le runtime

Cet Assistant Débogage managé n'a aucun effet sur le CLR. Il fournit uniquement des données relatives aux appels à liaison anticipée qui sont effectués sur les interfaces à liaison tardive.

Sortie

Nom de la méthode ou nom du champ qui fait l'objet d'un accès à liaison anticipée.

Configuration

<mdaConfig>
  <assistants>
    <dirtyCastAndCallOnInterface />
  </assistants>
</mdaConfig>

Voir aussi