在 C++ Windows 应用程序中访问命令行参数

Posted

技术标签:

【中文标题】在 C++ Windows 应用程序中访问命令行参数【英文标题】:Access command line parameters in C++ Windows App 【发布时间】:2021-06-28 20:18:12 【问题描述】:

我有一个用 Embarcadero C++Builder 编写的 C++ Windows 应用程序,我想将命令提示符中给出的参数传递给应用程序。

int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR argv, int argc)

    try
    
        Application->Initialize();
        Application->CreateForm(__classid(TFormMain), &FormMain);
        if (argc > 1)
        
            // pass argv to app.
        
        Application->Run();
    
    catch (Exception &exception)
    
        Application->ShowException(&exception);
    
    catch (...)
    
        try
        
            throw Exception("");
        
        catch (Exception &exception)
        
            Application->ShowException(&exception);
        
    
    return 0;

我该如何从这里开始?

【问题讨论】:

IIRC Application->ExeName 包含路径、文件名和字符串形式的所有参数。 【参考方案1】:

首先,您的_tWinMain 入口点的最后两个参数是错误的。它们实际上被定义为LPSTR lpCmdLine, int nShowCmdargv/argc 参数仅在控制台应用程序的 main() 样式入口点中提供,而不在 GUI 应用程序的 WinMain 样式入口点中提供。 lpCmdLine 参数是指向包含整个原始命令行的单个字符串的指针,它不会像 main() 那样预先解析为子字符串数组。并且nShowCmd参数与命令行完全无关。

您可以使用 Win32 API GetCommandLineW()CommandLineToArgvW() 函数来获取这样的数组。

另外,C++Builder 的 RTL 有几个自己的 Command Line Support Routines:

System::CmdLine System::ParamCount() System::ParamStr() System::Sysutils::FindCmdLineSwitch()

【讨论】:

以上是关于在 C++ Windows 应用程序中访问命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

Windows 安装程序,在 C++ 中访问自定义操作中的自定义属性

如何访问 C++ windows 10 应用程序中的默认线程池?

在 Windows 环境中从 C 或 C++ 访问 COM 接口

Windows C++ 程序中的访问冲突总是会立即崩溃吗?

使用 C++ 在 Windows 中执行“运行”命令?

如何在 Windows 命令提示符下使用 Dev C++ 编译器编译 C++ 程序?