首頁  >  文章  >  後端開發  >  如何修復VS2010中的PinvokeStackImbalance異常?

如何修復VS2010中的PinvokeStackImbalance異常?

Barbara Streisand
Barbara Streisand原創
2024-11-03 21:17:29780瀏覽

How to Fix the PinvokeStackImbalance Exception in VS2010?

修正 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>

附加說明 >

    此異常僅發生在託管偵錯助理(MDA)模式下。它不會在發布模式下觸發。
  • 有關呼叫約定的更多信息,請參閱 MSDN 參考。

以上是如何修復VS2010中的PinvokeStackImbalance異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn