>  기사  >  백엔드 개발  >  VS2010에서 PinvokeStackImbalance 예외를 수정하는 방법은 무엇입니까?

VS2010에서 PinvokeStackImbalance 예외를 수정하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 21:17:29781검색

How to Fix the PinvokeStackImbalance Exception in VS2010?

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>

추가 참고 사항

  • 이 예외는 MDA(관리 디버깅 도우미) 모드에서만 발생합니다. 릴리스 모드에서는 트리거되지 않습니다.
  • 호출 규칙에 대한 자세한 내용은 MSDN 참조를 참조하세요.

위 내용은 VS2010에서 PinvokeStackImbalance 예외를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.