C++ 如何获取Win32 C/C+;的命令行选项+;节目?

C++ 如何获取Win32 C/C+;的命令行选项+;节目?,c++,c,winapi,C++,C,Winapi,我有一个C/C++winapi程序,我想将命令行功能扩展到它(我在C#中看到过,但从未见过C++)。如果在没有参数的情况下打开可执行文件,它会正常打开窗口,但当从带有参数(如输入或输出文件)的命令行调用时,窗口不会打开,所有用户交互都是通过命令行完成的。我怎样才能做到这一点?最好我能用C语言完成,因为我的WinMain()函数就在这里 提前感谢您的帮助 在WinMain中有LPSTR-lpCmdLine参数。您可以使用CommandLineToArgvW函数解析lpCmdLine。如果存在必要的

我有一个C/C++winapi程序,我想将命令行功能扩展到它(我在C#中看到过,但从未见过C++)。如果在没有参数的情况下打开可执行文件,它会正常打开窗口,但当从带有参数(如输入或输出文件)的命令行调用时,窗口不会打开,所有用户交互都是通过命令行完成的。我怎样才能做到这一点?最好我能用C语言完成,因为我的WinMain()函数就在这里


提前感谢您的帮助

WinMain
中有
LPSTR-lpCmdLine
参数。您可以使用
CommandLineToArgvW
函数解析
lpCmdLine
。如果存在必要的参数,您将不会创建或显示程序窗口并执行此操作。

WinMain中有
LPSTR lpCmdLine
参数。您可以使用
CommandLineToArgvW
函数解析
lpCmdLine
。如果存在必要的参数,则不会创建或显示程序窗口并执行此操作。

有几种方法可以将(已解析的)命令行参数传递给应用程序

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

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

使用Windows API
Windows API提供的函数允许您在程序中的任何位置获取指向命令行的指针。同样,这只返回单个字符串。可以通过调用将字符串解析为单个参数,从而生成参数数组及其大小。请注意,
CommandLineToArgvW
没有窄字符版本,因此如果您不是为Unicode编译,则无法将其应用于传递到
WinMain
的命令行参数

无论如何,即使您不是为Unicode编译,这两个API调用都是可用的

阴极射线管
如果您不关心可移植性,Microsoft的CRT实现提供了全局变量,可以在程序中的任何位置使用这些变量来获取解析后的命令行。虽然方便,但它取决于定义的预处理器符号
\uu wargv
是否存储有效指针。只有在定义了UNICODE时才会这样做。

有几种方法可以将(已解析的)命令行参数传递给应用程序

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

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

使用Windows API
Windows API提供的函数允许您在程序中的任何位置获取指向命令行的指针。同样,这只返回单个字符串。可以通过调用将字符串解析为单个参数,从而生成参数数组及其大小。请注意,
CommandLineToArgvW
没有窄字符版本,因此如果您不是为Unicode编译,则无法将其应用于传递到
WinMain
的命令行参数

无论如何,即使您不是为Unicode编译,这两个API调用都是可用的

阴极射线管
如果您不关心可移植性,Microsoft的CRT实现提供了全局变量,可以在程序中的任何位置使用这些变量来获取解析后的命令行。虽然方便,但它取决于定义的预处理器符号
\uu wargv
是否存储有效指针。只有在定义了UNICODE的情况下才会这样做。

只需查找文档。如何确定传递给
CommandLineToArgvW
作为
pNumArgs
的命令行参数的数量?编辑:没关系,它是一个指针,指向将被分配参数的数量。非常感谢你
CommandLineToArgvW
是帮助函数。您可以使用循环直接分析
lpCmdLine
,特别是当您只需要一个参数时
CommandLineToArgvW
可以很好地解析长文件名,例如用引号括起来的空格。注意:使用
CommandLineToArgvW()
时,最好使用
GetCommandLineW()
来确保Unicode字符串,而不是
WinMain()的
lpCmdLine
参数
不是Unicode字符串。只需查找文档即可。如何确定传递给
CommandLineToArgvW
作为
pNumArgs
的命令行参数的数量?编辑:没关系,它是一个指针,指向将被分配参数的数量。非常感谢你
CommandLineToArgvW
是帮助函数。您可以使用循环直接分析
lpCmdLine
,特别是当您只需要一个参数时
CommandLineToArgvW
可以很好地解析长文件名,例如用引号括起来的空格。注意:使用
CommandLineToArgvW()
时,最好使用
GetCo