WinMain関数


エントリポイント

まず、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()関数を理解するのに非常に重要です



前のページへ戻る次のページへ