Partilhar via


pInvokeStackImbalance MDA

The pInvokeStackImbalance gerenciado Assistente de depuração (MDA) é ativado quando o CLR detecta que a profundidade da pilha após a telefonar de invocação de uma plataforma não coincide com a profundidade da pilha esperado, considerando a convenção de telefonar especificada no DllImportAttribute o atributo, bem sistema autônomo a declaração de parâmetros na gerenciado assinatura.

Observação:

O pInvokeStackImbalance O MDA é implementado apenas para plataformas de 32 bit x86.

Observação:

No .NET estrutura versão 3.5, o pInvokeStackImbalance O MDA é desabilitado por padrão. Quando você usa a versão 3.5 do .NET estrutura com o Visual Studio 2005, a pInvokeStackImbalance MDA será exibido na gerenciado Assistentes de depuração lista o Exceções caixa de diálogo (que é exibida quando você clica em Exceções on the Depurar menu).No entanto, marcar ou desmarcar o Lançada caixa de seleção pInvokeStackImbalance não ativar ou desabilitar o MDA; apenas controla se o Visual Studio lança uma exceção quando o MDA é ativado.

Sintomas

Um aplicativo encontra uma violação de acesso ou telefonar de invocação de dano ao fazer ou após uma plataforma de memória.

Causa

O gerenciado telefonar de invocação de assinatura da plataforma podem não coincidir com a desinstalação gerenciado assinatura do método sendo chamado.Essa incompatibilidade pode ser causada pela gerenciado assinatura não declarar o número correto de parâmetros ou não especificar o dimensionar apropriado para os parâmetros.O MDA também pode ativar porque a convenção de chamada, possivelmente especificado pelo DllImportAttribute o atributo, não é compatível com a convenção de chamada não gerenciada.

Resolução

Revisão gerenciada invocação de plataforma assinatura e a convenção de chamada para confirmar que ela corresponde a assinatura e a convenção de chamada do destino nativo.Tente especificar explicitamente a convenção de chamada em ambos os lados gerenciado e não gerenciado.Também é possível, embora não tão provável que a função não gerenciada unbalanced pilha por Outros motivo, sistema autônomo um bug no compilador não gerenciado.

Efeito sobre o tempo de execução

Forças invocação de plataforma todas as chamadas para percorrer o caminho nonoptimized no CLR.

Saída

A mensagem MDA fornece o nome do invocação de plataforma telefonar de método que está causando desequilíbrio pilha.Uma mensagem de exemplo de uma invocação de plataforma telefonar no método SampleMethod é:

A call to PInvoke function 'SampleMethod' has unbalanced the stack. 
This is likely because the managed PInvoke signature does not match 
the unmanaged target signature. Check that the calling convention and 
parameters of the PInvoke signature match the target unmanaged signature.

Configuração

<mdaConfig>
  <assistants>
    <pInvokeStackImbalance />
  </assistants>
</mdaConfig>

Consulte também

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas

Visão geral do empacotamento interop

Referência

MarshalAsAttribute

Outros recursos

Interoperabilidade