Notice
Recent Posts
관리 메뉴

Hacking Arts

APIENTRY와 CALLBACK, WndProc 본문

Programing/API Programing

APIENTRY와 CALLBACK, WndProc

Rakehell 2014. 9. 28. 01:09

- APIENTRY : APIENTRY 정의를 찾아가면 WINAPI가 나오고 WINAPI를 찾아가면 __stdcall이다.


- CALLBACK : CALLBACK 정의를 찾아가면 __stdcall이 나온다.


- 왜 둘다 __stdcall인데 나누었을까? API의 경우 수많은 함수들과 해당 함수들이 해야 할 역할이 명백히 나누어진다. 그래서 나누어지는 이유는 프로그래머들의 가독성을 높이기 위한 이유 이다.


- CALLBACK이 붙었기 때문에 OS에서 CALLBACK 함수를 호출하는 것이아니다. 


- WinMain 함수 안에 WNDCLASS를 RegisterClass()함수를 통해 등록한다. OS가 이벤트 발생에 의해 OS가 호출해 주는 함수를 callback이라고 한다. 그러기 위해서는 OS는 함수포인터를 호출해 주어야 한다. 그렇다면 함수 포인터는 어떻게 OS가 찾는가? WinMain()에 WNDCLASS가 RegisterClass를 통해 등록했기 때문에 호출이 가능하다.


- WNDCLASS 내에 WNDPROC lpfnWndProc 이라는 요소가 함수포인터가 된다. 이곳에서 등록되기 때문에 WndProc이 호출 될 수 있다.


- callback function이란? 

자신의 프로그램 함수 -> API 함수 : 기본적인 모습

API함수 -> 자신의 프로그램 함수 : callback 함수

API 함수중에 함수포인터를 요구하는 함수들이 간혹있는데 이런 함수들의 경우 구현해논 함수를 인자값으로 넘겨주면 API는 그 함수를 사용하게 됩니다.


-참고

http://program.egloos.com/viewer/1352400

http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=392