Maison > Article > développement back-end > Pourquoi est-ce que j'obtiens des erreurs « PinvokeStackImbalance » dans Visual Studio 2010 lors de l'appel d'une DLL C à partir de C# ?
Erreur PinvokeStackImbalance dans Visual Studio 2010
Question :
Lors de la mise à niveau vers Visual Studio 2010 , les utilisateurs rencontrent une exception persistante « pinvokestackimbalance » lors de l’appel d’une DLL C à partir d’une application C#. Cette exception n'était pas présente dans Visual Studio 2008.
Réponse :
Cette exception est due à une modification du comportement par défaut de l'assistant de débogage géré (MDA) dans Visual Studio 2010. Pour résoudre ce problème, envisagez les étapes suivantes :
Corrigez la convention d'appel :
La cause principale de l'exception est un paramètre de convention d'appel incorrect. Dans Visual Studio 2010, la convention d'appel par défaut pour DllImport est CallingConvention.WinApi, qui équivaut à CallingConvention.StdCall pour les applications de bureau x86. Cependant, dans ce cas, la DLL C attend la convention d'appel Cdecl.
Pour corriger cela, modifiez l'attribut [DllImport] dans le code C# pour spécifier explicitement CallingConvention.Cdecl.
<code class="cs">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, int inTotalSize, int inWindow, int inLevel);</code>
Désactivez le MDA PinvokeStackImbalance :
Le MDA PinvokeStackImbalance peut être désactivé dans les paramètres de débogage de Visual Studio pour l'empêcher d'interférer avec d'autres tâches de débogage.
Considérations supplémentaires :
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!