MFC應用程序接收命令行參數的實現

  有些時候我們需要我們的可執行程序在啓動時獲得用戶指定的參數值,比如windows中常用的ping命令:

ping 192.168.0.1 –t

  其中192.168.0.1 和-t都是該可執行程序ping的參數。MFC中提供了比較便捷的方式來實現參數值的傳入,也就是本文要講述的CCommandLineInfo類。
通過MFC嚮導生成的應用程序框架,在主App類中可以看到如下的代碼:

// 分析標準外殼命令、DDE、打開文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

  這兩行就是CCommandLineInfo類的標準用法,實現了新建、打開文件、打印機等的操作,具體用法參見:http://baike.baidu.com/view/2880057.htm?fr=ala0_1。如果需要定義自己的參數,則需要從CCommandLineInfo派生一個類,然後重載該類的ParseParam方法,實現參數的解析即可。

1.從CCommandLineInfo派生出類CMyCommandLineInfo:

class CMyCommandLineInfo : public CCommandLineInfo
{
public:
        void ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast);
};


2.在主程序App類中聲明成員變量,用於保存命令行傳入的參數:

CString m_strUsername;    
CString m_strPassword;    

     
3.重載ParseParam方法:

        void CMyCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
        {
                static int num = 0;    
                CCommandLineInfo::ParseParam(lpszParam, bFlag, bLast);
                switch(num)
                {    
                        case 0:
                                theApp.m_strUsername = CString(lpszParam);
                                break;
                        case 1:
                                theApp.m_strPassword = CString(lpszParam);
                                break;
                }
                num++;
        }


  該方法通過遞歸的方式解析命令行中傳入的所有參數,依次保存到相應的變量中。

4.修改主程序的調用,用派生的CCommandLineInfo類替換默認的:

CMyCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);


  通過這簡單的幾步,就可以方便的取得命令行參數了。要注意的是命令行在傳遞參數的順序要同程序裏定義的一致。如本例中,第1個參數是用戶名,第2個參數是密碼,如果順序錯了,程序自然不能得到正確的參數數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章