Condividi tramite


MDA dirtyCastAndCallOnInterface

Aggiornamento: novembre 2007

L'assistente al debug gestito dirtyCastAndCallOnInterface viene attivato al tentativo di effettuare una chiamata con associazione anticipata attraverso un vtable su un'interfaccia di classe contrassegnata solo per l'associazione tardiva.

Sintomi

Un'applicazione genera una violazione di accesso o presenta un comportamento imprevisto quando in CLR viene effettuata una chiamata con associazione anticipata effettuata mediante COM.

Causa

Il codice sta tentando una chiamata con associazione anticipata attraverso un vtable mediante un'interfaccia di classe che supporta solo l'associazione tardiva. Per impostazione predefinita, le interfacce di classe vengono identificate come a sola associazione tardiva. Possono essere inoltre identificate come ad associazione tardiva mediante l'attributo ClassInterfaceAttribute con il valore AutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Risoluzione

La soluzione consigliata consiste nel definire un'interfaccia esplicita da utilizzare con COM e fare in modo che i client COM effettuino le chiamate attraverso tale interfaccia anziché mediante l'interfaccia di classe generata automaticamente. In alternativa, è possibile trasformare la chiamata proveniente da COM in una chiamata ad associazione tardiva mediante IDispatch.

Infine, è possibile identificare la classe come AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]) per consentire a COM l'esecuzione di chiamate con associazione anticipata. Tuttavia, questo sistema è sconsigliato a causa delle limitazioni del controllo delle versioni illustrate in ClassInterfaceAttribute.

Effetto sul runtime

Questo assistente al debug gestito non produce effetti su CLR. Si limita a generare un report dei dati relativi alle chiamate con associazione anticipata su interfacce ad associazione tardiva.

Output

Il nome del metodo o del campo cui si accede mediante associazione anticipata.

Configurazione

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

Vedere anche

Concetti

Diagnostica degli errori tramite gli assistenti al debug gestito

Riferimenti

ClassInterfaceAttribute

Altre risorse

Interoperabilità