Visual Studio 2010 中出現PinvokeStackImbalance 錯誤
問題:
問題:問題:
答案:
此異常是由於託管偵錯助理 (MDA) 的預設行為變更而導致的Visual Studio 2010。要解決此問題,請考慮以下步驟:
<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>
異常的主要原因是呼叫約定設定不正確。在 Visual Studio 2010 中,DllImport 的預設呼叫約定是 CallingConvention.WinApi,這相當於 x86 桌面應用程式的 CallingConvention.StdCall。但是,本例中的 C DLL 需要 Cdecl 呼叫約定。
若要修正此問題,請編輯 C# 程式碼中的 [DllImport] 屬性以明確指定 CallingConvention.Cdecl。導航至「調試」>一般。
取消選取「啟用託管偵錯助理」選項。以上是為什麼從 C# 呼叫 C DLL 時在 Visual Studio 2010 中出現「PinvokeStackImbalance」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!