- ベストアンサー
EXEへの引数渡しについて
VC++でプログラミングしています。 MFCを使ってダイアログベースのEXEを造っています。 このEXEは別のプロセスから CreateProcess関数で起動され、 引数も渡されます。 で、質問です。 ダイアログのEXEでは、渡された引数を解析するために、何処で、 どのようにしたらよいのでしょうか? C言語での (argc, argv) のような仕組みがあるのでしょうか? 識者の方、ご教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#第2パラメータの先頭に、ダミーのスペースを入れるのがよいと思います。
その他の回答 (3)
- osaosa42
- ベストアンサー率60% (20/33)
CWinAppのメンバ「m_lpCmdLine」を参照すればよいです。 InitInstance内で呼び出せばいいよん。
補足
ありがとうございます。 osaosa42 さんには、度々アドバイスして頂き、感謝です。 m_lpCmdLine を参照して確認したのですが、不明な点があります。 呼び出し側のプロセスが CreateProcess() の第2パラメータで 文字列を渡したのですが、m_lpCmdLine はNULLとなっています。 いろいろ試しましたが、文字列の中の最初のスペース以降の部分が m_lpCmdLine に入っていました。 #こういう仕様??? 以下がテスト結果です。 GetCommandLine() もやってみました。 CreateProcess()で起動するプロセスは "c:\temp\test.exe" とします。 <テスト1> 第2パラメータ:NULL m_lpCmdLine:NULL GetCommandLine:"c:\temp\test.exe" <テスト2> 第2パラメータ:"123456" m_lpCmdLine:NULL GetCommandLine:"123456" <テスト3> 第2パラメータ:"12 34 56" m_lpCmdLine:"34 56" GetCommandLine:"12 34 56" パラメータの有無をチェック/解析したいのですが、純粋にパラメータを 取得することはできないのでしょうか? 第2パラメータがNULLの時、GetCommandLine() が NULLになってくれれば よかったのですが。。。 #第2パラメータの先頭に、ダミーのスペースを入れるのがいいのかなあ。。。
- SoraTobuYume
- ベストアンサー率80% (4/5)
No 1 の方が紹介れているリンク先の方法とは別に、次のような仕組みもあります。 __argc や __argv といったマクロです。 このマクロは、STDLIB.H に定義されています。 __argc は argc と同じ、 __argv も argv と同じ役割です。 マクロの中身は普通の C 関数アクセスに置き換えられているだけなので、InitInstance だろうが CWinApp 派生クラスのコンストラクタだろうが、どこからでも使えます。 argc argv[] に慣れているのでしたら、利用が簡単だと思います。 ただ、実際には関数呼び出しになるので、左辺値にできません。 代入は必要ないと思いますが…。 また、微妙に呼び出しコストもあるでしょう。
お礼
回答ありがとうございました。 大変参考になりました。 今回は m_lpCmdLine を使うことにしました。
- coolguys
- ベストアンサー率18% (351/1917)
参考URLのようなことでしょうか?
お礼
回答ありがとうございました。 大変参考になりました。
お礼
回答ありがとうございました。 大変参考になりました。 機会があれば、またアドバイスお願いします。