ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LRESULT / CALLBACK / WPARAM / LPARAM
    Programming Language/C++ 2017. 7. 9. 04:09

    (2014년에 네이버 블로그에서 작성했던 글을 티스토리로 옮기며 이관했습니다)

     

     

     

    Win32 API 경험자라면 LRESULT CALLBACK Func(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 형태의 콜백 함수를 많이 보셨을 겁니다.

     

    의미를 알기 쉬웠던 HWND(핸들), UINT(unsigned int)를 제외한 키워드들이 어떤 의미를 함축하고 있는지 알아보겠습니다.

     

    1. LRESULT

     

    LRESULT은 이렇게 선언돼 있습니다.

    1
    2
    #typedef long LONG_PTR
    #typedef LONG_PTR LRESULT
    cs

     

     

    long 과 같습니다. 왜 typedef로 재정의가 되었냐면 개발 시 리턴값임을 명시해 주기 위해서입니다.

     

     

    2. CALLBACK

     

    CALLBACK은 호출규약입니다.

    LRESULT와 마찬가지로 어떻게 선언돼 있는지 확인해 보겠습니다.

    1
    #typedef CALLBACK __stdcall
    cs

     

     

    표준 호출 규약입니다. 즉, 파라미터를 스택에 쌓아서 함수를 호출하고, 쌓인 파라미터들을 함수가 리턴되기 전에 정리합니다.

    - MSDN: https://msdn.microsoft.com/ko-kr/library/zxk0tw93.aspx

     

     

     

    3. WPARAM, LPARAM

     

    WORD PARAMETER, LONG PARAMETER의 약자로, OS에서 콜백 함수를 호출할 때 부가적으로 주는 메시지를 가지는 변수들입니다.

    WPARAM은 WORD형이라고 오해할 수도 있는데 사실 unsigned int형입니다. LPARAM은 의미 그대로 long형이고요.

     

    현재는 두 값 다 4바이트인데, 예전 16Bit 환경에서는 int가 2바이트였습니다.

    그래서 wParam은 주로 상태를 나타내는 플래그나 간단한 값을 전달할 때 쓰였고, lParam은 좌표 등의 2바이트의 크기로는 나타내기 힘든 값이나 포인터를 전달할 때 사용되었습니다.

Designed by Tistory.