• ベストアンサー

EXEへの引数渡しについて

VC++でプログラミングしています。 MFCを使ってダイアログベースのEXEを造っています。 このEXEは別のプロセスから CreateProcess関数で起動され、 引数も渡されます。 で、質問です。 ダイアログのEXEでは、渡された引数を解析するために、何処で、 どのようにしたらよいのでしょうか? C言語での (argc, argv) のような仕組みがあるのでしょうか? 識者の方、ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.4

#第2パラメータの先頭に、ダミーのスペースを入れるのがよいと思います。

nabezo-
質問者

お礼

回答ありがとうございました。 大変参考になりました。 機会があれば、またアドバイスお願いします。

その他の回答 (3)

  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.3

CWinAppのメンバ「m_lpCmdLine」を参照すればよいです。 InitInstance内で呼び出せばいいよん。

nabezo-
質問者

補足

ありがとうございます。 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パラメータの先頭に、ダミーのスペースを入れるのがいいのかなあ。。。

回答No.2

No 1 の方が紹介れているリンク先の方法とは別に、次のような仕組みもあります。 __argc や __argv といったマクロです。 このマクロは、STDLIB.H に定義されています。 __argc は argc と同じ、 __argv も argv と同じ役割です。 マクロの中身は普通の C 関数アクセスに置き換えられているだけなので、InitInstance だろうが CWinApp 派生クラスのコンストラクタだろうが、どこからでも使えます。 argc argv[] に慣れているのでしたら、利用が簡単だと思います。 ただ、実際には関数呼び出しになるので、左辺値にできません。 代入は必要ないと思いますが…。 また、微妙に呼び出しコストもあるでしょう。

nabezo-
質問者

お礼

回答ありがとうございました。 大変参考になりました。 今回は m_lpCmdLine を使うことにしました。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.1

参考URLのようなことでしょうか?

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=83519
nabezo-
質問者

お礼

回答ありがとうございました。 大変参考になりました。

関連するQ&A