WinMain()関数
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
・hInstanceは、実行中のアプリケーションを識別する為の整数値(インスタンス・ハンドル)を受け取るものだが、現在の32ビットWindowsのシステム(Win32)では、どのアプリケーションを実行しても同じ値が渡されるので、この値を利用してアプリケーションを一意に識別する事は出来ない。しかし、APIの中にはアプリケーション自身を参照する為にこの値を引数にとるものがある。アプリケーションのあちこちで必要になる事があるので、グローバル変数に保存しておく場合も多い。
・hPrevInstanceもインスタンス・ハンドルだが、これはWindows3.1などの16ビットwindowsの互換性のために残っているものだ。16ビットWindowsでは、同じアプリケーションがすでに実行中である場合は、先に起動したアプリケーションのインスタンス・ハンドルがここに格納されるようになっていた。Win32では必ず0がセットされるので、利用価値はない。
・lpCmdLineはmain関数の2番目の引数(argv)と違ってパラメータごとに切り分けれれた形にはなってないため、必要なら自分で文字列を解析しなければならない。標準の機能ではないが、VisualC++では解析済みのパラメータが__argvというグローバル変数にセットされている。
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
hInstance | WinMain関数を実行しているアプリケーションそのものを表すインスタンスハンドルが格納されている。 |
hPrevInstance | 通常はNULLが格納されます。このパラメータは16ビットWindows時代に使われていたもので、Win32 APIでは利用する事はありません。 |
lpCmdLine | コマンドライン引数で渡されたNULLで終わる文字列へのポインタ |
nCmdShow | ウィンドウをどのように表示するべきかを指定した値が格納されています。 |
・hInstanceは、実行中のアプリケーションを識別する為の整数値(インスタンス・ハンドル)を受け取るものだが、現在の32ビットWindowsのシステム(Win32)では、どのアプリケーションを実行しても同じ値が渡されるので、この値を利用してアプリケーションを一意に識別する事は出来ない。しかし、APIの中にはアプリケーション自身を参照する為にこの値を引数にとるものがある。アプリケーションのあちこちで必要になる事があるので、グローバル変数に保存しておく場合も多い。
・hPrevInstanceもインスタンス・ハンドルだが、これはWindows3.1などの16ビットwindowsの互換性のために残っているものだ。16ビットWindowsでは、同じアプリケーションがすでに実行中である場合は、先に起動したアプリケーションのインスタンス・ハンドルがここに格納されるようになっていた。Win32では必ず0がセットされるので、利用価値はない。
・lpCmdLineはmain関数の2番目の引数(argv)と違ってパラメータごとに切り分けれれた形にはなってないため、必要なら自分で文字列を解析しなければならない。標準の機能ではないが、VisualC++では解析済みのパラメータが__argvというグローバル変数にセットされている。
Comments