c++ - 在 C++ Windows 应用程序中访问命令行参数
问题描述
我有一个用 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;
}
我该如何从这里开始?
解决方案
_tWinMain
首先,您的入口点的最后两个参数是错误的。它们实际上被定义为LPSTR lpCmdLine, int nShowCmd
。 argv
/argc
参数仅在控制台应用程序的main()
-style 入口点中提供,而不在 GUI 应用程序的WinMain
-style 入口点中提供。该lpCmdLine
参数是指向包含整个原始命令行的单个字符串的指针,它不会像这样预先解析为子字符串数组main()
。并且该nShowCmd
参数根本与命令行无关。
您可以使用 Win32 APIGetCommandLineW()
和CommandLineToArgvW()
函数来获取这样的数组。
或者,C++Builder 的 RTL 有几个自己的命令行支持例程:
推荐阅读
- gradle - 同一棵树中的多个目录
- show-hide - 仅显示/隐藏淡入淡出的文本 css
- java - com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:不是 JSON 数组:{"type":"Point","coordinates":[-122.3964485,37.7912561]}
- php - 获取数组中小于'x'的最高键
- node.js - 猫鼬:中间件预删除一个选项不起作用
- gitahead - GitAhead - 我可以“打开现有存储库”到“远程”列表中吗?
- apache-spark - 运行 Apache Hudi deltastreamer 时出错
- node.js - 如何使用 axios 和 Cheerio 实现多页抓取
- python-3.x - 我应该将协程用于异步代码中的同步代码吗?
- flutter - 如何在 Flutter 中与 BLE 设备进行绑定