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引数は、アプリをどのような形式で表示するかを示したもの。ただ、現時点でボクのアプリで使ったことがない。