WINAPI는 함수 호출 규약으로 windef.h에 정의 되어 있다. 기본적으로 _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로 간주되어 함수를 호출하게 되면 오류가 난다.
댓글
댓글 쓰기