m_lpCmdLine の使い方について

[戻る]
kudou 2005/05/13(金) 23:25:54
WinXP sp2 VC++6.0

MFC プログラムで第二引数を取得したいのですが、
上手くいきません。
 
引数はvisualstadioプログラム引数で設定しています。


          // コマンド引数を取得
    if(m_lpCmdLine[0] == NULL){    // 引数なし

    } else {// 引数あり
      CString Str = m_lpCmdLine[1];
    }

ori 2005/05/13(金) 23:43:01
m_lpCmdLineはargvみたいに引数毎に分割されてないので
CCommandLineInfo等使って解析しなければなりません。

kudou 2005/05/14(土) 09:02:52
VCのプログラム引数を
Debug\XXXXX.exe C:\Documents and Settings\test.txt
と設定した場合、
C:\Documents and Settings\test.txtを取得したいのですが、
CCommandLineInfoを利用して解析できるのでしょうか_?
教えていただけませんか?

ゆう 2005/05/14(土) 09:13:02
普通に
CString Str = m_lpCmdLine ;
で代入できませんか?

::PathUnquoteSpaces(m_lpCmdLine) ;
なんてしておいた方が良いかもしれません。

kudou 2005/05/14(土) 09:25:53
ゆう様
CString Str = m_lpCmdLine ;
でとるとプログラム引数の全て
Debug\XXXXX.exe C:\Documents and Settings\test.txt
を取得していまいます。

Strでとった全ての引数は、自分で分別しなければいけないのでしょうか?
Debug\XXXXX.exe
C:\Documents and Settings\test.txt
上記の二つを別に取得したいです。

ゆう 2005/05/14(土) 09:41:05
私の環境(win2000 VC++6.0)では
"C:\Documents and Settings\test.txt"だけが取得できており、
Debug\XXXXX.exe はついてきません。
環境に依存するんですかね。
win98では""はついてきませんでしたから。

ゆう 2005/05/14(土) 09:45:02
oriさんがいうようにするなら、こんな感じでしょうか。

 CCommandLineInfo cmdInfo;
 ParseCommandLine(cmdInfo);
 if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
  {
    Str = cmdInfo.m_strFileName ;
  }

ゆう 2005/05/14(土) 09:47:58
>CCommandLineInfo cmdInfo;
> ParseCommandLine(cmdInfo);
> if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
>  {
>    Str = cmdInfo.m_strFileName ;
>  }
まちがいです。
CCommandLineInfo cmdInfo;
 ParseCommandLine(cmdInfo);
 if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen)
  {
    Str = cmdInfo.m_strFileName ;
  }

Blue 2005/05/14(土) 13:41:53
単に
>Debug\XXXXX.exe C:\Documents and Settings\test.txt
の指定の仕方が悪いのでは?
Debug\XXXXX.exe "C:\Documents and Settings\test.txt"
にしてあげないといけないとか。

古いスレッドには追加発言できません。