我有两个用C ++开发的独立控制台应用程序。我被要求为它们开发GUI。在此GUI中,我收集了启动任何这些应用程序所需的一些参数。任何人都可以在将控制台应用程序与此GUI集成时给出一些指导?是否可以从GUI启动应用程序而不是看到控制台?应用程序在控制台中写入的内容是否可以重定向到日志文件?
提前致谢。
答案 0 :(得分:2)
从GUI开始:
1)尝试提取控制台应用程序的纯逻辑部分,与屏幕上的显示无关。丢弃在控制台内显示数据的部分。
您可以使用GUI工具包,例如Qt,它非常易于设置和使用。
然后
2)如果您希望应用程序将内容写入日志文件,那么您可以执行以下两项操作:
a)使用将STDOUT重定向到文件的参数启动程序,例如:
./MyProgram > logfile.txt
b)只需打开一个文件,然后通过修改打印代码从应用程序中写入文件。
我希望这会有所帮助。
答案 1 :(得分:2)
要将GUI与命令行工具分离,您可以让GUI调用提供正确参数的现有程序。
您可以使用CreateProcess() API函数redirecting its output to a filehandle。该调用接收STARTUPINFO结构,您可以在其中指定是否显示命令的窗口。
查看链接以获取示例,可以找到完整的创建流程示例here。
这是纯粹的Windows API处理方式。
如果您正在通过System.Diagnostics.Process进行C ++ / .NET开发,那么事情会更容易。
如果你可以选择任何语言来实现它,我当然会采用.NET方式(甚至将语言改为C#),这几乎是微不足道的(因为它管理所有的API调用本身,你有一个理智的界面它)
你也可以通过shell重定向输出,但这是相当不灵活且容易出错的,IMO。
答案 2 :(得分:1)
我说你有两个明确的选择:
第二个选项通常更简单,更清晰,但如果控制台应用程序参数语法发生更改,则可能会“不同步”。
答案 3 :(得分:0)
看看Expect。可以使用不同的实现,并链接到GUI库。
Expect旨在与CLI进行交互并与它们进行交互(提供inoput,读取输出)。根据所选的实现(Perl / Java / Python以及原始Tcl),您可以使用相应的GUI工具包(例如Swing to Java)。
答案 4 :(得分:0)
看看Tcl/Tk.它专门用于为命令行C程序改进脚本编写,并且有一个C API,可以非常简单地执行此操作。 作为奖励,您还可以获得程序的脚本功能。有几种方法可以支持这种类型的集成:
将Tcl解释器链接到程序中。有一个简单的API可以将Tcl数据结构转换为argv
类型char **
结构。这使您可以调用程序并使用命令行参数。
将管道生成到C / C ++程序并通过管道与它进行交互。
使用Tcl脚本中的命令参数生成程序。
其他更精细的RPC构造(但您可能不需要这些)。
Tcl非常便携,可以在许多平台上运行,包括Windows。 Tcl还附带了一个易于编程的GUI工具包,称为Tk。现代版本支持主题引擎,使其具有原生外观,因此您可以使Tk应用看起来非常接近本机窗口。
This posting讨论了如何使用Tcl / Tk进行深入了解的事情。