如何在C++生成器的应用程序形式中读取命令行(argv)

How to read command line(argv) in a form of application of C++ Builder?

本文关键字:取命令行 argv 应用程序 C++      更新时间:2023-10-16

使用C++Borland,我尝试读取命令行argv

我需要在表单中,当用户单击一个按钮时,它将读取命令行argv的值。但问题是,我找不到void main(int argc, char ** argv).

我已经在调试中尝试过,我把argv或放在我放LPSTR的形式的 cpp 文件中,但它不起作用。

我发现只有WinMain,更重要的是,在表单的cpp文件中,没有"WinMain",请问如何获得它?

通常在 C++ Builder GUI 项目中,您没有标准的C++ main()函数。虽然可以使用 Win32 GetCommandLine API 函数,但仍必须将命令行解析为单独的参数。所以运行时提供了辅助函数来读取命令行参数,如System::ParamStr()System::Sysutils::FindCmdLineSwitch等。

您可以将

GetCommandLine函数与CommandLineToArgvW结合使用。

请注意,后者仅在宽字符版本中可用。

或者,您可以将WinMain替换为标准main,并将构建选项更改为使用标准main,如果支持的话(它与Visual C++和GNU g++一起使用(。或者,如果编译器支持此语言扩展,则可以使用宽字符wmain 。标准main的一个问题是参数被编码为Windows ANSI,这以及其他缺点意味着它们不能表示所有有效的Windows文件名,而wmain的参数和由CommandLineToArgvW检索的参数可以。


最后一种选择是解析您获得的命令行作为 WinMain 的第四个参数。但是,这没有任何优势。 WinMain是 16 位 Windows 时代的残留物,但它从未有过技术目的,如果可能的话,最好将其删除。


上述所有解决方案不仅适用于Borland C++ Builder,还适用于任何Windows C++编译器。

您可以:

  1. System.hpp中使用 RTL 的ParamCount()ParamStr()功能。

  2. 使用 C 运行时的全局_argc并在 stdlib.h_argv变量。

  3. 分别在 windows.hshellapi.h 中使用 Win32 API 的GetCommandLineW()CommandLineToArgvW()函数。

至于 WinMain() ,它位于项目的主.cpp文件中,该文件与实现表单的.cpp文件不同。 在项目管理器中,右键单击.exe文件,然后选择View Source 。或者直接打开<ProjectName>.cpp文件。