Visual Studio 2010 の PinvokeStackImbalance の問題
Visual Studio 2010 では、C DLL を呼び出すときに「pinvokestackimbalance」例外が頻繁に発生します。この例外は、以前 Visual Studio 2008 では無効になっていましたが、VS2010 ではデフォルトで有効になり、デバッグ作業が妨げられています。
問題の原因
コード:
<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>
問題は、間違った呼び出し規約にあります。 DllImport のデフォルトは CallingConvention.WinApi で、x86 デスクトップ コードの CallingConvention.StdCall と同じです。ただし、C 関数は __cdecl 呼び出し規則を使用しますが、これは異なります。
解決策
問題を解決するには、次のように DllImport 行を編集します。
<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]</code>
これにより、正しい呼び出し規約が使用され、「pinvokestackimbalance」例外が解決されます。
以上がVisual Studio 2010 で「PinvokeStackImbalance」例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。