[Win32 API] WINAPI - 함수호출규약
WINAPI는 함수 호출 규약으로 windef.h에 정의 되어 있다.
LPSTR lpCmdLine,
int nCmdShow);
기본적으로 _stdcall과 _cdecl 이 있는데 , 함수를 어떤 방식으로 호출할지 결정하는지 정한다.
- _stdcall
- 함수 호출시 인자를 스택에 , 오른쪽에서 왼쪽순으로 저장한다.
- func(a,b,c) 라면 스택에 c를 넣고, b를 넣고, a를 넣는다.
- 스택에 저장한 인자 메모리를 호출당한 쪽 함수에서 해제해 준다.
- _cdecl
- 함수 호출시 인자를 스택에 오른쪽에서 왼쪽 순으로 저장한다. _stdcall과 동일
- 스택에 저장한 인자 메모리를 호출한 쪽 함수에서 해제해 준다.
윈도우즈, 베이직,파스칼등 에서는 stdcall_이 default이다.
하지만, c/c++에서는 _cdecl이 default이다.
따라서, 코딩중 Win32 API함수를 호출하는 경우에는 명시적으로 _stdcall을 써줘야한다.
예) int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine,
int nCmdShow);
라고 WINAPI라고 명시하면, _stdcall로 처리된다. WINAPI를 생략하게 되면, _cdecl로 간주되어 함수를 호출하게 되면 오류가 난다.
댓글
댓글 쓰기