2009-07-23 62 views
3

我有两个用C++开发的独立控制台应用程序。我被要求为他们开发一个GUI。在这个GUI中,我收集了启动这些应用程序所需的一些参数。任何人都可以将控制台应用程序与此GUI集成在一起?是否有可能从GUI启动应用程序并没有看到控制台?应用程序在控制台中写入的内容是否可以重定向到日志文件?将GUI集成到控制台应用程序

在此先感谢。

+0

如果你发现有用的东西,你可以upvote的答案(这是这个想法)。 – 2009-07-23 11:14:21

回答

2

要将GUI从命令行工具中分离出来,您需要用GUI调用提供正确参数的现有程序。您可以使用CreateProcess() API功能redirecting its output to a filehandle。该呼叫将收到STARTUPINFO结构,您可以在其中指定是否显示该命令的窗口。

查看链接的例子,一个完整的创建过程示例可以找到here

这是纯粹的Windows API处理方式。

如果您正在进行C++/.NET开发,通过System.Diagnostics.Process可以更轻松地完成任务。

如果你可以选择任何语言来做到这一点,我一定会采用.NET方式(甚至将语言改为C#),这几乎是微不足道的(因为它本身管理所有的API调用,而且你有一个理智的接口)

你也可以通过shell重定向输出,但这是相当不灵活和容易出错的IMO。

0

看看Expect。不同的实现可用,并将链接到GUI库。

Expect旨在连接到CLI并与它们交互(提供输入,读取输出)。根据选择的实现(有Perl/Java/Python以及原始的Tcl),您可以使用相应的GUI工具包(例如Swing to Java)。

+0

我忘记说我正在使用Windows XP。 – deb 2009-07-23 11:00:59

+0

不应该是一个问题。尽管该页面涉及Unix/X11,但不同的平台可以使用不同的实现。例如Java变体显然将与平台无关 – 2009-07-23 11:04:04

+0

我将尝试从我开发的GUI中调用应用程序,但我也会看到Expect如何工作以防其他解决方案无法正常工作。再次感谢! – deb 2009-07-23 11:13:02

2

从GUI开始:

1)尝试提取控制台应用程序,它是纯逻辑的部分,和什么都没有做与屏幕上显示的东西。丢弃显示控制台内部数据的部分。

您可以使用GUI工具包,例如Qt,该工具包非常易于安装和使用。


然后

2)如果你想要写的东西到一个日志文件的应用程序,那么有两件事情可以做:

一)与启动程序将会将STDOUT重定向到文件的参数,例如:

./MyProgram > logfile.txt 

b)只需打开一个文件并通过修改打印代码从应用程序中写入。

我希望这会有所帮助。

+0

非常有用......我还没有想过“>”thingy。其中一个应用程序是由我编写的,它可以很容易地提取逻辑部分,但另一个是一个非常大的和修改的应用程序...这可能会很棘手......谢谢! – deb 2009-07-23 11:09:33

1

我说你有两个明确的选择:

  1. 扩展应用程序,并把它们连接到一个GUI,使得功能从GUI调用。
  2. 创建一个独立应用程序(由其自身编译,没有来自控制台应用程序的任何代码依赖性)的GUI,在运行时调用(exec)控制台应用程序,传递从窗体收集的参数或其提供的任何交互机制。

第二个选项通常更简单,更清晰,但如果控制台应用程序参数语法更改可能会“不同步”。

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进行某种你在某种程度上要求的事情。

相关问题