Visual Studio 2010의 PinvokeStackImbalance 문제
Visual Studio 2010에서는 C DLL을 호출할 때 "pinvokestackimbalance" 예외가 자주 발생합니다. 이전에 Visual Studio 2008에서 비활성화되었던 이 예외는 이제 VS2010에서 기본적으로 활성화되어 디버깅 작업을 방해합니다.
문제 원인
코드:
<code class="csharp">[DllImport("ImageOperations.dll")] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, int inTotalSize, int inWindow, int inLevel);</code>
<code class="cpp">extern "C" { OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, unsigned char* outRemappedImage, int inTotalSize, int inWindow, int inLevel); }</code>
문제는 잘못된 호출 규칙에 있습니다. DllImport의 기본값은 x86 데스크톱 코드용 CallingConvention.StdCall과 동일한 CallingConvention.WinApi입니다. 그러나 C 함수는 다른 __cdecl 호출 규칙을 사용합니다.
해결 방법
문제를 해결하려면 DllImport 줄을 다음과 같이 편집할 수 있습니다.
<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]</code>
이렇게 하면 올바른 호출 규칙이 사용되어 "pinvokestackimbalance" 예외가 해결됩니다.
위 내용은 Visual Studio 2010에서 \'PinvokeStackImbalance\' 예외가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!