Visual Studio 2010의 PinvokeStackImbalance 오류
질문:
Visual Studio 2010으로 업그레이드 시 , C# 애플리케이션에서 C DLL을 호출할 때 사용자에게 지속적인 "pinvokestackimbalance" 예외가 발생합니다. 이 예외는 Visual Studio 2008에는 없었습니다.
답변:
이 예외는 Visual Studio 2008의 MDA(관리 디버깅 도우미) 기본 동작 변경으로 인해 발생합니다. Visual Studio 2010. 이 문제를 해결하려면 다음 단계를 고려하십시오.
호출 규칙 수정:
예외의 주요 원인은 다음과 같습니다. 잘못된 호출 규칙 설정. Visual Studio 2010에서 DllImport의 기본 호출 규칙은 CallingConvention.WinApi이며, 이는 x86 데스크톱 애플리케이션의 CallingConvention.StdCall과 동일합니다. 그러나 이 경우 C DLL은 Cdecl 호출 규칙을 예상합니다.
이를 수정하려면 C# 코드의 [DllImport] 특성을 편집하여 CallingConvention.Cdecl을 명시적으로 지정합니다.
<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>
PinvokeStackImbalance MDA 비활성화:
Visual Studio의 디버깅 설정에서 PinvokeStackImbalance MDA를 비활성화하여 다른 디버깅 작업을 방해하지 않도록 할 수 있습니다.
추가 고려 사항:
위 내용은 C#에서 C DLL을 호출할 때 Visual Studio 2010에서 \'PinvokeStackImbalance\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!