プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

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



参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=83519
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/06 23:36

No 1 の方が紹介れているリンク先の方法とは別に、次のような仕組みもあります。



__argc や __argv といったマクロです。
このマクロは、STDLIB.H に定義されています。

__argc は argc と同じ、
__argv も argv と同じ役割です。

マクロの中身は普通の C 関数アクセスに置き換えられているだけなので、InitInstance だろうが CWinApp 派生クラスのコンストラクタだろうが、どこからでも使えます。

argc argv[] に慣れているのでしたら、利用が簡単だと思います。

ただ、実際には関数呼び出しになるので、左辺値にできません。
代入は必要ないと思いますが…。
また、微妙に呼び出しコストもあるでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/06 23:38

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

補足日時:2001/07/06 11:44
    • good
    • 0

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/06 23:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています