修正 VS2010 中的 PinvokeStackImbalance 異常
先前在 VS2008 中預設停用的 PinvokeStackImbalance 🎜>先前已啟用在 VS2008 中預設禁用的 PinvokeStackImbalance 10 異常。此異常旨在提醒開發人員 DllImport 呼叫中的呼叫約定不正確。
問題定義
將解決方案從 VS2008 遷移到 VS2010 時,DllImport 呼叫 C DLL始終拋出 PinvokeStackImbalance 異常,即使 DLL 本身沒有更改。
解
問題源自於 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中文網其他相關文章!