如何获取 Win32 C/C++ 程序的命令行选项?

问题描述 投票:0回答:2

操StackOverflow,操OpenAI。

c++ c winapi
2个回答
1
投票

LPSTR lpCmdLine
中有
WinMain
参数。您可以使用
CommandLineToArgvW
函数来解析
lpCmdLine
。当必要的参数存在时,您将不会创建或显示程序窗口并完成这项工作。


1
投票

您可以通过多种方式将(已解析的)命令行参数传递给您的应用程序。

入口点

CRT 将命令行作为第三个参数传递到用户提供的入口点 (WinMain)。根据您的应用程序是否针对 Unicode 进行编译,这是宽字符串还是窄字符串。当接受您无法控制的输入时,不能保证使用窄字符版本能够正常工作。命令行接受您无法控制的输入,因此您必须针对 Unicode 进行编译(通过定义

UNICODE
_UNICODE
预处理器符号)。

无论哪种方式,命令行都会作为单个字符串传递。因此,除非您解析出各个参数,否则它的实用性有限。

使用Windows API

Windows API 提供了 GetCommandLineW 函数,允许您在程序中的任意位置获取指向命令行的指针。同样,这仅返回单个字符串。可以通过调用 CommandLineToArgvW 将字符串解析为单独的参数,从而生成参数数组及其大小。请注意,

CommandLineToArgvW
没有窄字符版本,因此如果您不是针对 Unicode 进行编译,则无法将其应用于传递到
WinMain
的命令行参数。

无论如何,即使您没有针对 Unicode 进行编译,这两个 API 调用也可用。

显像管

如果您不关心可移植性,Microsoft 的 CRT 实现提供了 __argc、__argv、__wargv 全局变量,可以在程序中的任何位置使用它们来获取已解析的命令行。虽然方便,但

__wargv
是否存储有效指针取决于定义的预处理器符号。仅当定义了
_UNICODE
时才会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.