すみませんが教えてください。
現在、Windows XP の VC++ .NET( MFC )ダイアログベースで開発していますが、アプリ
ケーション起動時にコマンドラインからの引数の取得方法がわかりません。CWinApp ク
ラスの m_lpCmdLine にある・・・というところまではわかったのですが、どのように取
得するのかに困っています。
C 言語と同じで「 コマンド名 個数 arg1 arg2 ... 」というフォーマットで格納される
のでしょうか。
どうやって、Visual Studio で引数を指定するのか操作方法も一緒に教えていただける
と幸いです。
お手数ですが、よろしくお願いいたします。
AfxGetApp()でCWinAppのポインタを得られます。
>Visual Studio で引数を指定するのか
これはデバッグ時に引数を渡すということでしょうか?
そうでしたら「プロジェクト」-「xxxのプロパティ」から
「デバッグ」を選択して「コマンド引数」に設定してやります。
たとえば、コマンドプロンプトを使ってコマンド引数を取得することは可能なのでしょ
うか?
コマンドプロンプトから起動する ってことですか?
だったらやってみればいい。
MFCを使用しているのであれば、コマンドライン解析の仕組みが既にありますので
そこに個々のアプリ用の処理をインプリメントすれば解析の実装は簡単に出来ます。
MSDNでCCommandLineInfoクラスとCWinApp::ParseCommandLineメソッドを調べれば、
その辺の解説をしているページへのリンクがあるのではないかと思います。
この辺の実装を知らない、もしくは使わない人が多いみたいなので
なんで使わないのか私は不思議なんですけれどね。
GetCommandLine();をCXXXXVIEWクラス OnInitialUpdateの中でも使えるよ
AA.EXE /P
の場合
/P
が取得できます
ただし
AA.EXE P
の場合 NULLになるケースもあります
ここの検索でCreateProcessをキーワードに検索すると
起動がわ、受け取り側のサンプル いっぱいあります
ちょっと前にフルでソース載せた覚えあるんだけどな
皆様方、たくさんのレスどうもありがとうございます。
以下のように対応してみました。
BOOL CxxxxApp::InitInstance()
{
....... 省略
CWinApp::InitInstance();
AfxEnableControlContainer();
SetRegistryKey(_T(アプリケーション ウィザードで生成されたローカル アプリケ
ーション));
CxxxxDlg dlg;
// あらかじめ CxxxxDlg クラス内に public なメンバ変数を持っといて・・・
// m_lpCmdLine を丸々コピーした
strcpy( &m_szxxxx[0] , m_lpCmdLine ) ; // * あとは CxxxxDlg 内で
// m_szxxxx[] を使っています。
....... 省略
return FALSE;
}
>これはデバッグ時に引数を渡すということでしょうか?
>そうでしたら「プロジェクト」-「xxxのプロパティ」から
>「デバッグ」を選択して「コマンド引数」に設定してやります。
この方法も試してみて、動的に引数を取得したかったので上記の手順にて行いました。
__argc、__argvを使うと言う方法もあります。