Win32APIのWinMain関数の引数はどんな意味なのか調べてみた

C言語とかC++でプログラミングをしていると、CUIではなくてGUIでアプリを作りたくなってきた。

そこでまずは、Win32APIの勉強として、WinMain関数の中身を調べていく事にした。

WinMain関数の引数の意味

WinMainの引数を見てみると、以下の様に書かれていることが多いが、それぞれの引数には以下の様な意味がある。

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

第1引数 HINSTANCE

インスタンスハンドルと呼ばれるもの。「このアプリはWordだよ」とか「このアプリはExcelだよ」と言う風に、アプリを識別するための一意の値が入る。

第2引数 HINSTANCE

これもインスタンスハンドルだが、Win32APIの先輩・Win16APIとの互換性を保つために用意された引数。常にNULLが入る

なので、Win32APIでプログラミングをする時には、まったく使わない引数。

第3引数 LPSTR

コマンドライン引数として渡された文字列のポインタが格納される引数。ちなみに、LPSTRとは、「Long Pointer to String」の略で、今ではポインタ変数は4byteで表現されているが、昔は2byteで表現していたようで、それでLong Pointerと表現しているのだろう。

参考記事:c++ - What is a long pointer? - Stack Overflow

また、今回の例では引数の型にLPSTRを使っているのが、これは8byteの文字列に対応した型。もし、16byteの文字列に対応した型を使いたい場合はPTSTRを使うと良い。

他にも使える型が多くあり、「Windows API/基本データ型と文字列 - WisdomSoft」のページが詳しい。(面倒くさいからPTSTRだけでいいか)

第4引数 int

第4引数は、アプリをどのような形式で表示するかを示したもの。ただ、現時点でボクのアプリで使ったことがない。