Win32 API命令行参数parsing

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

app.exe /argName1:"argValue" /argName2:"argValue" 

我需要从argc / argvvariables手动parsing它(能够确定哪些参数存在),还是Win32 API包含一些参数parsing器?

Solutions Collecting From Web of "Win32 API命令行参数parsing"

没有解析命令行参数的Win32支持。

请参阅MSDN上的相关文章:
解析C ++命令行参数
参数定义
定制C ++命令行处理

也看类似的问题:
C ++有哪些参数解析器库?
解析参数到main()
用于C / C ++的选项解析器?
在C ++中解析命令行参数的有效方法是什么?

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

你将不得不自己解析。 正则表达式将是一个很好的选择。

你可以把各种各样的图书馆和东西搞乱……但是有时你所需要的只是一些简单,实用和快速的东西:

 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] ); } } 

你明白了

这是假设一个正常的Win32控制台应用程序,因为你已经暗示(它有一个传统的main功能)。 对于Win32应用程序,您可以使用WinMain ,因为另一个人已经发表了评论。

您可以通过在循环中使用GetCommandLine, PathRemoveArgs, PathGetArgs来解析参数

https://msdn.microsoft.com/en-us/library/windows/desktop/bb773742(v=vs.85).aspx

只是为了记录,如果你使用MinGW的GCC ,而不是微软的MSVC,你会得到包含在标准运行时库中的GNU getopt(也包括getopt_long和getopt_long_only变体)。

我不相信有一个Win32 API可用。 您可以查找getopt或其他库的Windows实现。

不知道这种win32 API函数的存在,但Boost.Program_Options库可以帮助你。

如果你的需求很简单,你可能要看一看阿格!
它是单头和超级好用:

 int main(int, char* argv[]) { argh::parser cmdl(argv); // declare if (cmdl[{ "-v", "--verbose" }]) // use immediately std::cout << "Verbose, I am.\n"; return EXIT_SUCCESS; } 

通过不介入,它不接管你的main()函数。

从自述文件:

哲学

与许多其他选择相反, argh采取了极简主义的自由放任的方法,非常适合用下面的规则进行argh原型设计:

API是:

  • 简约而富有表现力的:
    • 没有吸气剂也没有粘合剂
    • 只是[]()运算符。
    • 简单的迭代(范围for如此)。
  • 你不支付你不使用的东西;
  • 在解析阶段之后 ,在用户端转换为类型化的变量(通过std::istream >>
  • 没有例外的失败。
  • 自由BSD许可证;
  • 单头文件;
  • 没有非标准的依赖关系。

argh不关心:

  • 你有多少“ - ”在你的选择之前;
  • 你支持哪些标志和选项 – 这是你的责任;
  • 语法验证: 任何命令行是位置参数标志选项的有效( 不一定是唯一的 )组合;
  • 自动生成使用信息。