Exception - PInvokeStackImbalance(함수 호출 규약)

호출 결과 스택이 불안정하게 되었습니다. 뭔 소리지??

이런경우 함수 호출 규약이 맞지 않아서 발생함.

함수 호출 규약을 맞게 설정하면 해결된다.


예외 발생 코드.

1
2
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
cs

DllImport에 함수 호출 규약을 설정하면 된다.


예외 발생 수정 코드.

1
2
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
cs

StdCall 어디서 많이 본거 같지 않은가?

함수 호출 규약을 모르면 뭔소리인가 잘 이해가 안될꺼임.


아래는 함수 호출 규약을 정리한 글의 링크.

함수 호출 규약이란?


pinvoke.net - 사이트에서는 C#/VB.NET 사용자를 위한 PInvoke 선언을 모아놓음

반응형

'Programming > C/C++/C#' 카테고리의 다른 글

asm - 어셈블리어 기초2  (4) 2016.04.13
asm - 어셈블리어 기초  (1) 2016.04.09
C++ - 비트 출력 해보기  (1) 2016.03.09
C# - abstract 추상화  (0) 2016.01.26
C# - 파일 존재 여부 확인방법  (0) 2015.12.24
C++ - 연산자 operator  (0) 2015.12.16
C++ - 포인터를 이용해 배열 만들기  (0) 2015.12.01
C# - 주석처리 기능 summary  (0) 2015.08.27