我有一个小 win32 程序,可以使用CommandLineToArgvW给定的调用lpCmdLine
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
(void)hInstance;
(void)hPrevInstance;
(void)nCmdShow;
int argc;
LPTSTR* argv = CommandLineToArgvW(lpCmdLine, &argc);
MessageBoxW(0, lpCmdLine, TEXT("lpCmdLine"), MB_OK );
for(int i=0; i<argc;++i){
MessageBoxW(0, argv[i], TEXT("argv"), MB_OK );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我观察到的奇怪的事情是:
lpCmdLine是一个空字符串并CommandLineToArgvW返回 1 个参数 - 可执行路径。CommandLineToArgvW则返回参数的确切数量,不带可执行文件我找不到这种奇怪行为的记录。
我错过了什么?我是否以非预期的方式使用了该命令?
lpCmdLine类型:
LPCWSTR指向包含完整命令行的以 null 结尾的 Unicode 字符串的指针。如果此参数为空字符串,则函数返回当前可执行文件的路径。
这意味着仅当参数为空或者显式CommandLineToArgvW()包含可执行文件名称时才返回调用可执行文件名称。lpCmdLine
请注意,CommandLineToArgvW()需要完整的命令行。然而,根据WinMain():
lpCmdLine类型:
LPSTR应用程序的命令行,不包括程序名称。要检索整个命令行,请使用该
GetCommandLine函数。
因此,当您不带参数执行程序时,WinMain的lpCmdLine参数为空,并且CommandLineToArgvW()仅返回可执行文件名称。但是,如果您使用参数执行程序,则lpCmdLine参数不为空,但不包含可执行文件名称,因此CommandLineToArgvW()仅返回不包含可执行文件名称的参数。
因此,您需要按照WinMain()文档的说明进行操作并使用GetCommandLine()而不是lpCmdLine. 文档中也说明了这一点CommandLineToArgvW():
该
GetCommandLineW函数可用于获取适合用作参数的命令行字符串lpCmdLine。
所以,用这个代替:
LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |