Problème PinvokeStackImbalance dans Visual Studio 2010
Dans Visual Studio 2010, une exception « pinvokestackimbalance » est fréquemment rencontrée lors de l'appel de DLL C. Cette exception, précédemment désactivée dans Visual Studio 2008, est désormais activée par défaut dans VS2010, ce qui entrave les efforts de débogage.
Cause du problème
Le code :
<code class="csharp">[DllImport("ImageOperations.dll")] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, int inTotalSize, int inWindow, int inLevel);</code>
<code class="cpp">extern "C" { OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, unsigned char* outRemappedImage, int inTotalSize, int inWindow, int inLevel); }</code>
Le problème réside dans une convention d'appel incorrecte. DllImport est par défaut CallingConvention.WinApi, identique à CallingConvention.StdCall pour le code de bureau x86. Cependant, la fonction C utilise la convention d'appel __cdecl, qui est différente.
Résolution
Pour résoudre le problème, on peut modifier la ligne DllImport comme suit :
<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]</code>
Cela garantit que la convention d'appel correcte est utilisée, résolvant ainsi l'exception "pinvokestackimbalance".
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!