转自:http://blog.youkuaiyun.com/bao_qibiao/archive/2009/09/07/4528860.aspx
一.MFC中获取命令行参数的几种方法
下面转载自 http://www.qingfengju.com/article.asp?id=92
及http://blog.youkuaiyun.com/geeeeeeee/archive/2008/12/13/3510195.aspx
在MFC程序中,可以用以下几种方法来获取命令行参数。
为方便说明,我们假设执行了命令:C:/test/app.exe -1 -2
方法一
::GetCommandLine ();
将获取到 "C:/test/app.exe" -1 -2
方法二
for (int i=0;i<__argc ;i++)
{
__argv [i];
将依次得到C:/test/app.exe -1 -2
}
方法三
AfxGetApp ()->m_lpCmdLine;
将获取到 -1 -2
二。MFC中处理命令行的类
类CCommandLineInfo用于分析启动应用时的命令行参数。MFC应用一般都会在它的应用对象中使用函数InitInstance创建这个类的一个本地实例。然后把该对象传给CWinApp::ParseCommandLine,ParseCommandLine又重复调用 ParseParam填充CCommandLineInfo对象。最后,CCommandLineInfo对象被传给 CWinApp::ProcessShellCommand来处理命令行参数和选项。
view plaincopy to clipboardprint?
1. BOOL CExampleApp::InitInstance()
2. {
3. ...
4. // 分析标准外壳命令、DDE、打开文件操作的命令行
5. CCommandLineInfo cmdInfo;
6. ParseCommandLine(cmdInfo);
7.
8.
9. // 调度在命令行中指定的命令。如果
10. // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
11. if (!ProcessShellCommand(cmdInfo))
12. return FALSE;
13. ...
14. }
15.
16.
17. void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo)
18. {
19. for (int i = 1; i < __argc; i++)
20. {
21. LPCTSTR pszParam = __targv[i];
22. BOOL bFlag = FALSE;
23. BOOL bLast = ((i + 1) == __argc);
24. if (pszParam[0] == '-' || pszParam[0] == '/')
25. {
26. // remove flag specifier
27. bFlag = TRUE;
28. ++pszParam;
29. }
30. rCmdInfo.ParseParam(pszParam, bFlag, bLast);
31. }
32. }
延伸:继承CCommandLineInfo类的例子 http://blog.youkuaiyun.com/birdme007/archive/2007/04/11/1560420.aspx
这篇文章用代码分析了CCommandLineInfo http://blog.youkuaiyun.com/wangandy7811/archive/2008/12/31/3663447.aspx
三.用vc++调试带命令行的程序
在project--> setting-->debug-->Program arguments:输入你所带的参数。
Powered by Zoundry Raven