본문 바로가기

デベロップメント/Win32 API

WinMain 함수

원문 http://wisdom.sakura.ne.jp/system/winapi/win32/win3.html


엔트리 포인트

우선, Windows 프로그래밍을 위해서는 헤더 파일의 포함이 필요합니다.

Windows 프로그램의 형태나 구조체, 정수나 함수 호출을 위해서

그것을 정의한 헤더 파일을 포함 합니다.


Windows 프로그램의 주요(主要) 포함 파일은 WINDOWS.H입니다.

헤더 파일도 다른 헤더 파일을 포함하고 있습니다

Windows 프로그램에서는, 이 헤더 파일을 포함하지 않으면 안됩니다.


다음으로, 중요한 것입니다만 Windows 프로그램에 main() 함수는 없습니다.

그러면, 어디에서 프로그램이 시작되느냐 하면 WinMain() 함수입니다.

Windows 프로그램의 어플리케이션 엔트리 포인트는 WinMain() 함수입니다.

int WINAPI WinMain(
	HINSTANCE hInstance, 
	HINSTANCE hPrevInstance, 
	LPSTR lpCmdLine, 
	int nCmdShow
);

무엇인지 복잡한 인수(引数)를 가지고 있네요.
우선, 신경쓰이는 것은 함수명 앞의 WINAPI네요.

WINAPI는 WINDEF.H 헤더 파일에서 다음과 같이 정의되어 있습니다.


#define WINAPI __stdcall

__stdcall은 Win32 API 함수를 호출할 때의 규약(規約)입니다.
대부분의 Windows 함수는 WINAPI에 정의(定義)되어 있습니다.


첫번째 인수는 인스턴스 핸들로 불리는 형태입니다.

「핸들」 이라는 것은, 무언가를 식별하기 위해 사용하는 수치(数値)를 가르킵니다.

인스턴스 핸들이라는 것은 여기서의 프로그램을 식별하기 위한 핸들로써

일부의 Win32 API 함수를 호출하기 위해, 인수로 지정하는 일이 있습니다.

두번째 인수는 Win16의 산물입니다.

Windows는 같은 어플리케이션을 복수기동(複数起動)할 수 있습니다.
Win16에서는, 동일의 어플리케이션의 인스턴스는 메모리를 공유하고 있었습니다.
자기자신의 별도의 인스턴스의 확인에 이 인수가 사용되고 있었습니다.
하지만 Win32는 이와 다르므로, 두번째 인수는 항상 NULL입니다.

세번째 인수는 커맨드라인에서 취득한 인수로
LPSTR이라고 하는 형태는, Windows 표준의 문자형(文字型)입니다. (다음 장에서 설명합니다.)
네번째 인수는 어플리케이션의 초기 표시 방법을 지정합니다.

우리는 아직 윈도우를 만드는 방법을 모르기 때문에, 이 후에 자세히 설명하겠습니다.


그러면, 이것을 고려해서 전회(前回)의 프로그램을 한번 더 봅시다.

#include<windows.h>

int WINAPI WinMain(
		HINSTANCE hInstance ,
		HINSTANCE hPrevInstance ,
		LPSTR lpCmdLine ,
		int nCmdShow ) {
	return 0;
}

이 프로그램은 아직 아무것도 하지 않습니다.
하지만 WinMain()함수를 이해하는 것이 매우 중요합니다.




이전 페이지
목차
다음 페이지