VS2010 で PinvokeStackImbalance 例外を修正する
以前 VS2008 ではデフォルトで無効になっていた PinvokeStackImbalance 例外が、VS2010 ではデフォルトで有効になりました。この例外は、DllImport 呼び出しの呼び出し規則が間違っていることを開発者に警告することを目的としています。
問題の定義
ソリューションを VS2008 から VS2010 に移行する場合、DllImport は C DLL を呼び出します。 DLL 自体が変更されていない場合でも、一貫して PinvokeStackImbalance 例外がスローされます。
解決策
この問題は、DllImport 宣言で使用されている間違った呼び出し規約に起因します。デフォルトでは、DllImport は CallingConvention.WinApi を使用します。これは、x86 デスクトップ コードの CallingConvention.StdCall に相当します。ただし、基になる C 関数は __cdecl として宣言されており、これには CallingConvention.Cdecl が必要です。
修正
DllImport 宣言を変更して、正しい呼び出し規約を明示的に指定します。
<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>
追加メモ
以上がVS2010 で PinvokeStackImbalance 例外を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。