Бррр ничего не понял. Что ты хочешь? Смотри у тебя есть объект CCommandLineInfo, в который встроена определённая логика работы с определёнными параметрами
Параметры перебираются здесь - всё довольно просто
void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo)
{
for (int i = 1; i < __argc; i++)
{
LPCTSTR pszParam = __targv[i];
BOOL bFlag = FALSE;
BOOL bLast = ((i + 1) == __argc);
if (pszParam[0] == '-' || pszParam[0] == '/')
{
// remove flag specifier
bFlag = TRUE;
++pszParam;
}
rCmdInfo.ParseParam(pszParam, bFlag, bLast);
}
}
Обработка каждого параметра, который является флажком (признак -) происходит здесь
void CCommandLineInfo::ParseParamFlag(const char* pszParam)
{
// OLE command switches are case insensitive, while
// shell command switches are case sensitive
if (lstrcmpA(pszParam, "pt") == 0)
m_nShellCommand = FilePrintTo;
else if (lstrcmpA(pszParam, "p") == 0)
m_nShellCommand = FilePrint;
else if (lstrcmpiA(pszParam, "Register") == 0 ||
lstrcmpiA(pszParam, "Regserver") == 0)
m_nShellCommand = AppRegister;
else if (lstrcmpiA(pszParam, "Unregister") == 0 ||
lstrcmpiA(pszParam, "Unregserver") == 0)
m_nShellCommand = AppUnregister;
else if (lstrcmpA(pszParam, "dde") == 0)
{
AfxOleSetUserCtrl(FALSE);
m_nShellCommand = FileDDE;
}
else if (lstrcmpiA(pszParam, "Embedding") == 0)
{
AfxOleSetUserCtrl(FALSE);
m_bRunEmbedded = TRUE;
m_bShowSplash = FALSE;
}
else if (lstrcmpiA(pszParam, "Automation") == 0)
{
AfxOleSetUserCtrl(FALSE);
m_bRunAutomated = TRUE;
m_bShowSplash = FALSE;
}
}
Если твои параметры не попадают в этот список, то они просто игнорируются объектом CCommandLineInfo. Ну в самом деле, откуда ему знать, что ты (или я, или ещё кто другой) захотят передать. Он отвечает только за уже встроеные в МFC механизмы.
Например - означает флажок, -а - нет такого флажка - игнорируем.
След. параметр без -. Значит обрабатываем
void CCommandLineInfo::ParseParamNotFlag(const TCHAR* pszParam)
{
if (m_strFileName.IsEmpty())
m_strFileName = pszParam;
else if (m_nShellCommand == FilePrintTo && m_strPrinterName.IsEmpty())
m_strPrinterName = pszParam;
else if (m_nShellCommand == FilePrintTo && m_strDriverName.IsEmpty())
m_strDriverName = pszParam;
else if (m_nShellCommand == FilePrintTo && m_strPortName.IsEmpty())
m_strPortName = pszParam;
}
Отсюда m_strFileName = test
Дальше опять флажок -b - нет такого, игнорируем. Ну и последний параметр тоже не попадает ни в один из обработчиков. Значит тоже игнорируем.
Всё.
Так чего же ты хочешь/ждёшь? Что ты ожидаешь увидеть в m_strFileName? Один раз зайди дебуггером в ф-ю ParseCommandLine затрать одну минуту и всё станет ясно.
А я тебе сразу посоветовал, сделать свой класс CMyCommandLineInfo : public CCommandLineInfo и перепиши в нём две ф-ции - для флажковых параметров и для обычных. И всего делов
void CMyCommandLineInfo::ParseParamNotFlag(const TCHAR* pszParam)
{
CString stParam(pszParam);
if(stParam.CompareNoCase(_T("test"))==0)
{
}
else if(stParam.CompareNoCase(_T("mjau"))==0)
{
}
}
void CMyCommandLineInfo::ParseParamFlag(const char* pszParam)
{
CString stParam(pszParam);
if(stParam.CompareNoCase(_T("a"))==0)
{
}
else if(stParam.CompareNoCase(_T("b"))==0)
{
}
}
Делов на 1,5 минуты.