MFC程序解析命令行参数的相关问题:再灌水

时间:2021-07-06 14:32:29

  Boss的项目接口不符合甲方的规定,被打回来改。真是服了那帮人了,早不知道干嘛去了,到验收的时候才给出他们的接口,害我们苦逼地折腾。本来告知要在他们的平台上测试,后来又要我们自己搭演示平台,还非要从命令行给图形化界面程序传递参数(尼玛这帮nc,都图形化界面了还用命令行搞)。不过这也不是啥大问题,在一般的控制台程序里,主函数的参数是argc和argv,一般通过argv来传递程序需要的字符串类型的参数。MFC程序则不同,没有显式地提供这种参数直接拿来用,需要特殊的函数去解析命令行。代码如下:

void CPARAMENTSETDlg::OnBtnRun() 
{
    CString str;
    LPWSTR *szArglist = NULL;  //命令行字符串指针,szArglist[i]代表第i个字符串变量

    int nArgs = 0; //nArgs命令行参数的个数  
    
    szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);//命令行参数解析函数
    
    if(szArglist!= NULL)   
    {
        USES_CONVERSION; //相关头文件定义的宏
         str.Format(W2CT(szArglist[1]));//LPWSTR转换为LPCSTR
        MessageBox(str);
    } 
    
    LocalFree(szArglist);     
}

值得注意的是,解析得到的命令行参数的类型是LPWSTR,而模块中要求的类型是LPCSTR,必须进行类型转换。用强制转换(LPCSTR)会出错:得到的str只有原始字符串的首字符。故采用另一张方法:先声明:USES_CONVERSION;再调用W2CT(),即可完成类型转换。

参考链接:

http://blog.csdn.net/liushuiwu_001/article/details/5541106

http://www.cnblogs.com/foolboy/archive/2005/07/25/199869.html