MFC中获取命令行参数的几种方法

不妨假设应用程序名为CmdTest,在命令行输入CmdTest Hello World

方法一:

[cpp]  view plain copy
  1. CString str = ::GetCommandLine();  
  2. ASSERT(0 == str.Compare("CmdTest Hello World"));  

方法二:

[cpp]  view plain copy
  1. ASSERT(3 == __argc);  
  2. ASSERT(0 == strcmp(__argv[0],"CmdTest"));  
  3. ASSERT(0 == strcmp(__argv[1],"Hello"));  
  4. ASSERT(0 == strcmp(__argv[2],"World"));  

方法三:

[c-sharp]  view plain copy
  1. ASSERT(0 == strcmp("Hello World",AfxGetApp()->m_lpCmdLine));  

方法四:

使用MFC中的CCommandLineInfo类。

首先,将下面的代码注释,主要是不要生成对话框。

[cpp]  view plain copy
  1. CCmdTestDlg dlg;  
  2. m_pMainWnd = &dlg;  
  3. int nResponse = dlg.DoModal();  
  4. if (nResponse == IDOK)  
  5. {  
  6.     // TODO: Place code here to handle when the dialog is  
  7.     //  dismissed with OK  
  8. }  
  9. else if (nResponse == IDCANCEL)  
  10. {  
  11.     // TODO: Place code here to handle when the dialog is  
  12.     //  dismissed with OK  
  13. }  

创建CCommandLineInfo的派生类

[cpp]  view plain copy
  1. //MyCmdLineInfo.h  
  2. class CMyCmdLineInfo : public CCommandLineInfo    
  3. {  
  4. public:  
  5.     CMyCmdLineInfo();  
  6.     virtual ~CMyCmdLineInfo();  
  7.   
  8.     virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast);  
  9.   
  10.     CStringArray m_arCommd;  
  11. };  
  12.   
  13. //MyCmdLineInfo.cpp  
  14. CMyCmdLineInfo::CMyCmdLineInfo()  
  15. {  
  16.     m_arCommd.RemoveAll();  
  17. }  
  18.   
  19. CMyCmdLineInfo::~CMyCmdLineInfo()  
  20. {  
  21.   
  22. }  
  23.   
  24. void CMyCmdLineInfo::ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast)  
  25. {  
  26.     CString str = pszParam;  
  27.     m_arCommd.Add(str);  
  28. }  

在CCmdTestApp::InitInstance最后,return FALSE之前加上,注意要#include对应头文件

[cpp]  view plain copy
  1.         CMyCmdLineInfo  cmdInfo;  
  2.     cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;  
  3.     ParseCommandLine(cmdInfo);  
  4.   
  5. ASSERT(2 == cmdInfo.m_arCommd.GetSize());  
  6. ASSERT(0 == cmdInfo.m_arCommd[0].Compare("Hello"));  
  7. ASSERT(0 == cmdInfo.m_arCommd[1].Compare("World"));  

你可能感兴趣的:(MFC中获取命令行参数的几种方法)