分享

WinMain中的lpCmdLine参数 - 木水的日志 - 网易博客

 龙眼(1) 2010-10-16
win32可执行程序分为两种类型,基于控制台(Consol-based)的和基于窗口(Windows-based)的。基于控制台程序它的入口函数是传统的main,基于窗口的则是WinMain。这两个入口函数一大区别是对于命令行参数的处理。
WinMain函数原型:int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow),LPSTR lpCmdLine存储了命令行参数信息,MSDN对这参数解释:
lpCmdLine
[in] Pointer to a null-terminated string specifying the command line for the application, excluding the program name. To retrieve the entire command line, use the GetCommandLine function.
(指向一个应用程序命令中,除了程序名的null字符结束的字符串。GetCommandLine函数可以返回整个命令行)
为了更清晰lpCmdLine是什么内容,以下做一些测试。假设可执行程序名:test.exe。
1、命令:test.exe (回车)
lpCmdLine:0x00141f03 "" char *
注:
0x00141f03:lpCmdLine运行时内存地址
"":lpCmdLine内容,这里值是空串
char *:lpCmdLine类型,它指出lpCmdLine是字符串。
命令行中没任何参数。lpCmdLine是有效地址,但它是空字符串,即lpCmdLine[0]='\0'。因而程序要判断命令行是不是带参数不能用if (lpCmdLine)而应该用if (lpCmdLine[0])。
2、命令:test.exe --config-dir Wesnoth1.7 (回车)
lpCmdLine:0x00141f03 "--config-dir Wesnoth1.7" char *
命令行带参数,参数间有空格但没有"符号。
3、命令:test.exe "--config-dir Wesnoth1.7" (回车)
lpCmdLine:0x00141f03 ""--config-dir Wesnoth1.7"" char *
相比2,这里强行给参数加了"",可以看到lpCmdLine不对参数内的""进行处理,直接复制。
4、命令:test.exe "--config-dir "Wesnoth1.7" (回车)
lpCmdLine:0x00141f03 ""--config-dir "Wesnoth1.7"" char *
相比于3,这里强行在中间加一个",这造成了""没有配对,但WinMain只是原样复制而已。
WinMain的参数不像传统的
main函数,会依着特殊字符得出两个参数argv和argc,它就是除去可执行文件字符串(加上后续空格符)的整个命令行作为一个字符串,直接给了lpCmdLine。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多