# CodeGuru Technical FAQs > CodeGuru Individual FAQs >  MFC General: How to process command line arguments in a MFC application?

## kirants

*Q:* How to process command line arguments in a MFC application?

*A:*
Derive a class from CCommandLineInfo, say 'CCustomCommandLineInfo'



```
class CCustomCommandLineInfo : public CCommandLineInfo
```

Add virtual method 'ParseParam()'



```
{
  virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast);
}
```

In 'ParseParam()', check the 'pszParam' passed. Note, that 'ParseParam()' will be called as many times as the tokens being used while launching the command line. So, if you call 'Yourapp.exe /e /o /whatever', you will see 3 calls to 'ParseParam()' each with "/e", "/o", "/whatever". 



```
class CCustomCommandLineInfo : public CCommandLineInfo
{
  CCustomCommandLineInfo()
  {
    m_bExport = m_bOpen = m_bWhatever = FALSE;
  }

  //for convenience maintain 3 variables to indicate the param passed. 
  BOOL m_bExport;       //for /e
  BOOL m_bOpen;         //for /o
  BOOL m_bWhatever;     //for /whatever
 
  //public methods for checking these.
public:
  BOOL IsExport() { return m_bExport; };
  BOOL IsOpen() { return m_bOpen; };
  BOOL IsWhatever() { return m_bWhatever; };
   
  virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast)
  {
    if(0 == strcmp(pszParam, "/o"))
    {
      m_bOpen = TRUE;
    } 
    else if(0 == strcmp(pszParam, "/e"))
    {
      m_bExport = TRUE;
    }
    else if(0 == strcmp(pszParam, "/whatever"))
    {
      m_bWhatever = TRUE;
    }
  }
};
```

Instantiate an object of this class in 'InitInstance()' and parse it like below.



```
BOOL CYourApp::InitInstance()
{
  // Do all the stuff you want to do, like registering document tempates etc.

  CCustomCommandLineInfo oInfo;
  ParseCommandLine(oInfo);
  // ....
}
```

And then check



```
BOOL CYourApp::InitInstance()
{
  // Do all the stuff you want to do, like registering document tempates etc.

  CCustomCommandLineInfo oInfo;
  ParseCommandLine(oInfo);

  if(oInfo.IsExport())
  {
    // Do something
  }
  else if(oInfo.IsWhatever())
  {
    // Do whatever
  }

  // ....
}
```

----------


## Kvorak

Just as a note, this does not work in Visual Studio if the Configuration Properties->General->Character Set field is set to Unicode.  For that, the pszParam must be of type LPCTSTR.  Just wanted to point that out in case it wasn't obvious to anybody else.

----------

