VS2010에서 PinvokeStackImbalance 예외 수정
이전에 VS2008에서 기본적으로 비활성화되었던 PinvokeStackImbalance 예외가 VS2010에서는 기본적으로 활성화되었습니다. 이 예외는 개발자에게 DllImport 호출의 잘못된 호출 규칙을 경고하기 위한 것입니다.
문제 정의
VS2008에서 VS2010으로 솔루션을 마이그레이션할 때 DllImport는 C DLL을 호출합니다. DLL 자체가 변경되지 않은 경우에도 PinvokeStackImbalance 예외가 일관되게 발생합니다.
해결 방법
이 문제는 DllImport 선언에 사용되는 잘못된 호출 규칙으로 인해 발생합니다. 기본적으로 DllImport는 x86 데스크톱 코드용 CallingConvention.StdCall과 동일한 CallingConvention.WinApi를 사용합니다. 그러나 기본 C 함수는 CallingConvention.Cdecl이 필요한 __cdecl로 선언됩니다.
Fix
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!