Compartilhar via


dirtyCastAndCallOnInterface MDA

O dirtyCastAndCallOnInterface Assistente de depuração gerenciada (MDA) é ativado quando uma chamada early bound através de uma vtable é tentada em uma interface de classe foi marcada tardia somente.

Sintomas

Um aplicativo lança uma violação de acesso ou tem um comportamento inesperado quando você faz uma chamada early bound via COM no CLR.

Causa

Código está tentando uma chamada early bound através de uma vtable através de uma interface de classe é apenas de ligação tardia. Observe que, por classe padrão interfaces são identificados como sendo tardia somente. Eles também podem ser identificados como tardia com a ClassInterfaceAttribute de atributo com um AutoDispatch valor ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Resolução

A resolução recomendada é definir uma interface explícita para uso pelo COM e têm a chamada de clientes COM através desta interface em vez de por meio da interface de classe gerado automaticamente. Como alternativa, a chamada de COM pode ser transformada em uma chamada de ligação tardia via IDispatch.

Finalmente, é possível identificar a classe de AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]) para permitir chamadas de early bound sejam colocados no COM; No entanto, usando AutoDual não é altamente recomendado devido a limitações descritas no controle de versão de ClassInterfaceAttribute.

Efeito sobre o tempo de execução.

Este MDA não tem efeito sobre o CLR. Ela somente reporta dados sobre chamadas de early bound em interfaces de ligação tardia.

Saída

O nome do método ou o nome do campo que está sendo acessado early-bound.

Configuração

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

Consulte também

Referência

ClassInterfaceAttribute

Conceitos

Diagnosticar erros com assistentes de depuração gerenciada

Outros recursos

Interoperabilidade