Maison > développement back-end > C++ > le corps du texte

Comment corriger l'exception PinvokeStackImbalance dans VS2010 ?

Barbara Streisand
Libérer: 2024-11-03 21:17:29
original
838 Les gens l'ont consulté

How to Fix the PinvokeStackImbalance Exception in VS2010?

Correction de l'exception PinvokeStackImbalance dans VS2010

L'exception PinvokeStackImbalance, précédemment désactivée par défaut dans VS2008, a été activée par défaut dans VS2010. Cette exception est destinée à alerter les développeurs des conventions d'appel incorrectes dans les appels DllImport.

Définition du problème

Lors de la migration d'une solution de VS2008 vers VS2010, DllImport appelle vers une DLL C lève systématiquement l'exception PinvokeStackImbalance, même si la DLL elle-même n'a pas changé.

Résolution

Le problème provient d'une convention d'appel incorrecte utilisée dans la déclaration DllImport. Par défaut, DllImport utilise CallingConvention.WinApi, qui équivaut à CallingConvention.StdCall pour le code de bureau x86. Cependant, la fonction C sous-jacente est déclarée comme __cdecl, ce qui nécessite CallingConvention.Cdecl.

Fix

Modifiez la déclaration DllImport pour spécifier explicitement la convention d'appel correcte :

<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void FasterFunction(
    [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage, 
    [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage, 
    int inTotalSize, int inWindow, int inLevel);</code>
Copier après la connexion

Notes supplémentaires

  • Cette exception se produit uniquement en mode assistant de débogage géré (MDA). Il ne se déclenchera pas en mode Release.
  • Pour plus d'informations sur les conventions d'appel, consultez la référence MSDN.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal