int WINAPI WinMain(...) 이것이 원래는 [ == int APIENTRY WinMain(...) ]
int FAR PASCAL WinMain(...) 이거였다고 하네요
WinMain() 함수는 프로그램 내에서 누가 호출하는 것이 아니고
윈도우 시스템에서 호출하는 함수인데
윈도우 시스템은
1. 64KByte를 넘는 포인터를 쓸 수 있는 시스템이고 : FAR
2. 함수 호출 방식이 PASCAL 방식입니다. : PASCAL
초기에는 FAR PASCAL WinMain(...) 이랬다가
FAR PASCAL 을 WINAPI로 바꿔쓰자 해서
요즘에는 WINAPI WinMain(....) 이라고 하네요. . --;; 복잡혀. .
결론 :
WINAPI == FAR PASCAL == APIENTRY
(Windef.h <-- 여기에 정의 되어 있습니다.)
' PASCAL 이란' __cdecl의 반대란 뜻인데
PASCAL이나 __cdecl은 에.... 일단은 함수 호출할 때'
함수의 인자가 호출되는 순서를 정하는 거라고 보시면 됩니다.
즉' __cdecl은 함수의 인자가 오른쪽에서 왼쪽으로 호출되고
PASCAL(__pascal)은 거꾸로 왼쪽에서 오른쪽으로 호출되고
원래 C 언어는 함수 호출할 때' 예를들어'
funcA(10' 20' 30) 이런식이다 하면....
funcA를 호출하면서' 30을 먼저 메모리에 넣어 주고'
다음으로 20' 마지막으로 10을 메모리에 넣어 주죠...
이 C언어와 같은 방식을 __cdecl이라 하고....
반대로 funcA(10' 20' 30)을 호출할때'
메모리에 10' 20' 마지막으로 30을 넣어주는 방식을
파스칼 방식이다... 해서 PASCAL(__pascal)이라고 하죠.
PASCAL 방식은 첫번째 목적은 다른 언어로 짜여진 obj 파일과 링크를 하기
위해서 존재하는 표현식이라고 할 수 있습니다.
그렇지만 VC++ 에서 많은 API 들이 이 PASCAL 방식의 호출을 사용한다고
알고 있습니다.
사실인지는 모르겠지만. . 이 방식이 표준 C 방식보다 호출이 빠르다고 하네요.
'예전것 > 프로그래밍' 카테고리의 다른 글
StarUML (0) | 2009.12.08 |
---|---|
virtual 키워드에 대해서 (0) | 2009.10.16 |
winapi 참고사이트 (0) | 2009.10.01 |
Windows Mobile 프로그래밍 준비 - 프로젝트 생성 (0) | 2009.09.12 |
Device Emulator Manager (장치 에뮬레이터 관리자) (0) | 2009.09.12 |