MDA de dirtyCastAndCallOnInterface

El Asistente para la depuración administrada (MDA) dirtyCastAndCallOnInterface se activa cuando se intenta realizar una llamada enlazada en tiempo de compilación a través de una vtable en una interfaz de clase que se ha marcado solo como enlazada en tiempo de ejecución.

Síntomas

Una aplicación produce una infracción de acceso o tiene un comportamiento inesperado cuando se realiza una llamada enlazada en tiempo de compilación a CLR a través de COM.

Causa

El código intenta realizar una llamada enlazada en tiempo de compilación a través de una vtable mediante una interfaz de clase que es solo enlazada en tiempo de ejecución. Tenga en cuenta que las interfaces de clase predeterminadas se identifican solo como enlazadas en tiempo de ejecución. También pueden identificarse como enlazadas en tiempo de ejecución cuando el atributo ClassInterfaceAttribute tiene un valor AutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Solución

La solución recomendada es definir una interfaz explícita para que COM la use y hacer que los clientes COM llamen a través de esta interfaz en lugar de la interfaz de clase que se genera automáticamente. Como alternativa, la llamada desde COM se puede transformar en una llamada enlazada en tiempo de ejecución mediante IDispatch.

Por último, es posible identificar la clase como AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]) para permitir que se realicen llamadas enlazadas en tiempo de compilación desde COM; sin embargo, se desaconseja usar AutoDual debido a las limitaciones del control de versiones descritas en ClassInterfaceAttribute.

Efecto en el Runtime

Este MDA no tiene ningún efecto en el CLR. Solo notifica datos sobre las llamadas enlazadas en tiempo de compilación en interfaces enlazadas en tiempo de ejecución.

Output

El nombre del método o el nombre del campo al que se va a acceder mediante enlace en tiempo de compilación.

Configuración

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

Consulte también