コマンドライン引数を処理するには,CWinApp::m_lpCmdLine か __argc, __argv を使用する.
__argc と __argv は以下の様に定義されていてそのまま使用することが可能である.
extern int __argc;
extern char** __argv;
setargv.obj を一緒にリンクしておけばワイルドカード展開もやってくれる.
また,API の GetCommandLine() を使用するか MFC の CCommandLineInfo クラスも使用できる.
MFC の CCommandLineInfo は派生させて使用しなければならない.
そのままで /P や OLE 関連のシステム予約コマンドラインオプションを処理するようになっているからである.
派生させて使用するには以下のようにする.
class CMyCommandLineInfo : public CCommandLineInfo
{
public:
CMyCommandLineInfo();
void ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLast);
BOOL m_bOptionJ;
BOOL m_bOptionPT;
};
CMyCommandLineInfo::CMyCommandLineInfo()
{
m_bOptionJ = FALSE;
m_bOptionPT = FALSE;
}
void CMyCommandLineInfo::ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLast)
{
CCommandLineInfo::ParseParam(pszParam, bFlag, bLast);
if( bFlag ) {
CString strOption = pszParam;
if( strOption == _T("J") ) {
m_bOptionJ = TRUE;
} else if( strOption == _T("PT") ) {
m_bOptionPT = TRUE;
}
}
}
上記をインプリメントした上で,InitInstance() にて
CMyCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
とする.
参照
実行ファイルのパス