Programming/C/C++/C#

C# - Exception - PInvokeStackImbalance

휘탱 2016. 1. 20. 21:15

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 선언을 모아놓음

반응형