컴퓨터 공부/Win32 API 프로그래밍

[4월 28일 1교시] WinMain 기본 프로그램 분석1

려리군 2009. 4. 28. 14:38

CALLBACK 

시스템이 사용자 함수를 호출함.

<=> call : 사용자가 system call을 통해 함수를 수행.

#define  CALLBACK    stdcall


함수호출방식

참고주소 : http://www.winapi.co.kr/clec/cpp2/16-1-2.png

스택 포인터 값은 아래로(-방향으로) 증가한다.

함수에 진입할 때 bp = sp함으로써 함수들은 bp레지스터를 관리하여 내부 연산을 처리한다.


스택 처리방식에 의해 나누어진다.

함수가 return할 때 함수 인자에 대한 정리를 caller가 할 것인지 callee가 할 것이냐에 따라 구분됨.

_cdecl : 함수 스스로가 return까지 정리(리턴 주소가 제거됨)

...


HINSTANCE : 프로그램의 인스턴스 핸들 값. (주로 전역변수로..)

LPCTSTR : const형의 문자열 변수. 이후에 내용을 변경할 수 없다.

 - LP(포인터), C(const), T(TCHAR, char 혹은 unsigned short), STR(문자열)


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdParam, int nCmdShow);


crtstartup이 winmain함수를 호출.

APIENTRY

#define  APIENTRY    stdcall

hInstance : 프로그램 인스턴스 핸들.

base address(실행파일이 로딩 되었을 때 시작주소, 0x400000)와 관련되어 있음.

lpszCmdParam : 명령행으로 입력된 인수. 문자열 변수가 한 개 이므로 프로그래머가 토큰을 나누어 주어야 함.

nCmdShow : 프로그램이 실행될 형태. 다른 프로세스의 CreateProcess호출로 인수를 받아 최대, 최소화 형태를 바꿀 수 있다.


지역변수 선언

HWND hWnd;                  // 윈도우 핸들.

MSG Message;              // 메세지큐에서 하나의 메세지를 받기 위한 변수. (6개의 elements로 구성)

WNDCLASS WndClass;   // 시스템에 윈도우를 만든다고 신고하기 위한 변수(설계도 등록)


WinMain의 기본구조

1. 설계도 작성

2. 윈도우 생성

3. 메세지 가져오기(루프)

4. 종료 리턴