Visual Studio 2010 の PinvokeStackImbalance エラー
質問:
Visual Studio 2010 へのアップグレード時、ユーザーは、C# アプリケーションから C DLL を呼び出すときに永続的な "pinvokestackimbalance" 例外に遭遇します。この例外は、Visual Studio 2008 には存在しませんでした。
回答:
この例外は、マネージド デバッグ アシスタント (MDA) の既定の動作の変更により発生します。 Visual Studio 2010。この問題を解決するには、次の手順を検討してください:
呼び出し規約を修正します:
例外の主な原因は次のとおりです。呼び出し規約の設定が正しくありません。 Visual Studio 2010 では、DllImport の既定の呼び出し規則は CallingConvention.WinApi であり、x86 デスクトップ アプリケーションの CallingConvention.StdCall に相当します。ただし、この場合の C DLL は Cdecl 呼び出し規約を想定しています。
これを修正するには、C# コードの [DllImport] 属性を編集して 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>
PinvokeStackImbalance MDA を無効にする:
他のデバッグ タスクとの干渉を防ぐために、Visual Studio のデバッグ設定で PinvokeStackImbalance MDA を無効にすることができます。
追加の考慮事項:
以上がVisual Studio 2010 で C# から C DLL を呼び出すと「PinvokeStackImbalance」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。