예전것/프로그래밍2009. 10. 2. 02:28

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 방식보다 호출이 빠르다고 하네요.