前節で開発プログラムの仕様が固まったので実際にプログラム作ってみる。この程度の プログラムであれば手動で compiler/linker を動かして作ることも可能である。 とりあえず必要なソースファイル類を示しておこう。
プログラム言語は C でも C++ でもよいのだが、ファイル名の取得部分などは class 化した方が 楽に設計できるので、C++ を選んだ。 ローカル環境依存部分(言語など)は(いろいろ議論のあるところではあるが) Windows の一般的なプログラム手法に従い、リソースファイルとして分離する。 従って、この部分はリソースコンパイラを使ってコンパイルすることになる。 プログラム名は mwin01(minimal window 01)とする。ソースは機能別に 以下のファイルに分割する。
Windows は、NT系と 95系とでは文字や文字列の扱いが異なる。NT系は Unicode ベースであり、 95系は1バイトをベースとする多バイトで扱う。従って、文字や文字列を扱う ライブラリ関数が異なる。この差を吸収するため、windows 用ヘッダファイルには 統一的なライブラリ関数名が提供されており、 pre-processor で UNICODE と _UNICODE が定義されている場合は、 NT系のライブラリ関数が、そうでなければ 95系のライブラリ関数が選ばれるように なっている。
95系のライブラリ関数は NT系でも用意されているので、95系で作れば NT系でも 動作するが、効率が悪いばかりでなく制約も多い。 そこで、ここでは pre-processor に対する指示の仕方を知ることも兼ねて、 UNICODE と _UNICODE を定義することにする。
MinGW の gcc/g++ を使って Windows application を作る場合は、-mwindows を指示する ことになっている(筆者の経験では必ずしも必要無いようではあるが、、)。
ここで示したプログラムで必要な library は gdi32 と comdlg32 である(これらの情報は マイクロソフトが無償提供している Software Develop Kit (SDK) により得ることが できる)。
以上まとめると、コンパイル時に
-mwindows -DUNICODE -D_UNICODE ...をつけ、リンク時には
-lgdi32 -lcomdlg32をつける必要があるということである。これらを Eclipse/CDT に指示する必要がある。