C言語で簡単なプログラムを作ります。

0 コメント

第3回 引数を使ったアプリケーションを作成する (後編)

前回はmain()関数の引数にコマンドラインより値を代入して実行してみました。
値に文字列 CAT を代入すると args[1] の中身は[ CAT ]になりましたね。
main()関数の第1引数は args[] ポインタ文字配列の配列数でargs[0]はパス付きの
実行ファイル名。
args[1]以降はコマンドラインより代入した文字列です。

それではWindowsプログラミングのエントリポイントと呼ばれるWinMain()関数の引
数を見ましょうか。
以下のソースコードを見て下さい。

#include

int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
char buffer[256];

wsprintf( buffer, "hInstance = %d ", hInstance );
MessageBox( NULL, buffer, "引数1番目", MB_OK );

wsprintf( buffer, "hPrevInstance = %d ", hPrevInstance );
MessageBox( NULL, buffer, "引数2番目", MB_OK );

wsprintf( buffer, "lpCmdLine = %s ", lpCmdLine );
MessageBox( NULL, buffer, "引数3番目", MB_OK );

wsprintf( buffer, "nCmdShow = %d ", nCmdShow );
MessageBox( NULL, buffer, "引数4番目", MB_OK );

return 0;
}

なんだか、WinMain()関数の引数はmain()のように省略も出来ないし省略するとコン
パイルエラーが出たり、何の為に使うのか疑問に思いませんか。解かる方は当たり
前の話しだとか思うかもしれませんが。
とりあえず、ビルドをして実行してみましょう。
実行すると、画面に4回ダイアログボックスが表示されます。私の環境では各ダイ
アログ表示の内容は 以下の通りになりました。

<実行画面>
実行_引数追加前01実行_引数追加前02実行_引数追加前03実行_引数追加前04


また、前回のようにコマンドラインに何か文字列を入れてみましょう。編集者は
CAT と入れてみました。

<実行画面>
実行_引数追加後01実行_引数追加後02実行_引数追加後03実行_引数追加後04


第1引数のHINSTANCEてなんでしょうか?インスタンスのハンドル型と呼ばれますが、
編集者のように簡単なプログラムを組んでいる人は恐らくお約束ごとのように記述
しているかもしれませんが、気になります。
これは、アプリケーションを起動する為の識別番号です。ウインドウズはOS上で
は複数のアプリケーションの起動が可能なのはご存知かと思います。例えば、ワー
プロや表計算を同時に起動したりすることですが、MSーDOSではどうだったで
しょうか。OSは1つのアプリケーションしか起動できませんね。
編集者は元々Windowsから本格的にプログラムを組んで来たので、どうもこのイメー
ジを理解するのにとても時間がかかりました。
さて、次の第2引数を見ましょう。これはどうやら、常に0になるようです。引数
の意味は過去のOS Windows3.1で使われたパラメータですのでWin32アプリケーシ
ョンでは使いません。もし、この引数の使い方を知っている方はメールを下さい。
編集者は使い方を知りません。
次に第3引数を見てみましょう。これはmain()関数のargs[]といっしょでコマンド
ラインの文字列が格納されています。
説明する必要もなさそうです。
最後に第4引数を見てみましょう。これはウインドウの初期状態です。編集者はこ
の引数の使い方はわかりません。
実際に初期状態、つまり、縮小化したWindowを表示したりするのだとは思いますが
次回までに調べて置きます。

今回はウインドウズアプリケーションで引数に文字列を入れてダイアログを表示
してみました。
次回はいよいよウインドウズ枠の表示を挑戦してみましょう。C言語に慣れている
方は構造体の知識が必要です。

なお、編集者が今回使用したVC++のバージョンは2022です。
VCインストール・導入に関しては、もうしばらくお待ち下さい。後で報告できればと思います。

重要ワード
HINSTANCE MSーDOS 構造体 エントリポイント コマンドライン
スポンサーサイト



コメント

非公開コメント