Win32 API命令行参数解析

tom*_*mas 15 c windows winapi command-line command-line-arguments

我正在编写Win32控制台应用程序,它可以使用这样的可选参数启动:

app.exe /argName1:"argValue" /argName2:"argValue"
Run Code Online (Sandbox Code Playgroud)

我是否必须手动解析它(以便能够确定哪些参数存在)来自argc/argv变量,或者Win32 API是否包含一些参数解析器?

Sup*_*man 8

Win32为命令行参数提供的唯一支持是函数GetCommandLineCommandLineToArgvW.这与argv控制台应用程序的参数完全相同.

您将不得不自己进行解析.正则表达式将是一个很好的选择.


pad*_*ddy 6

你可能会弄乱各种库和东西……但有时你所需要的只是一些简单、实用和快速的东西:

int i;
char *key, *value;

for( i = 1; i <= argc; i++ ) {
    if( *argv[i] == '/' ) {
        key = argv[i] + 1;
        value = strchr(key, ':');
        if( value != NULL ) *value++ = 0;
        process_option( key, value );
    } else {
        process_value( argv[i] );
    }
}
Run Code Online (Sandbox Code Playgroud)

你明白了...

这是假设您暗示的普通 Win32 控制台应用程序(具有传统main功能)。对于 Win32 应用程序,您可以进入WinMain,正如另一个人已经评论过的那样。

  • 使用 Visual Studio 附带的 CRT 时,您可以通过 [__argc, __argv, __wargv](https://docs.microsoft.com/en-us/cpp/c-runtime-library/ argc-argv-wargv) 符号。它们也为在 WINDOWS 子系统中运行的应用程序填充。或者使用 Windows API 调用 [CommandLineToArgvW](https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391.aspx) 来解析 [GetCommandLineW](https://msdn. microsoft.com/en-us/library/windows/desktop/ms683156.aspx)。 (2认同)