1

我想编写一个 C++ 程序,以便根据配置文件可以是控制台应用程序或窗口应用程序。对于 GUI,我使用的是 WxWidget。我应该分别在 Windows 和 Linux (Buntu) 中做什么。

有人可以提供一些简单的例子吗?

4

2 回答 2

1

在运行时执行此操作的典型方法是将程序编译并链接为 Windows 应用程序。在运行时,您读取配置。如果它是为 GUI 设置的,那么创建窗口并按您的方式进行。如果它设置为控制台模式,那么您可以创建一个控制台窗口,将您的 stdout/stdin/sterr 流附加到它,然后离开。

我写了一个这样运行的程序。整个 UI 被抽象在一个纯虚拟接口后面,具体实现提供了控制台实现和 GUI 实现。在运行时,我实例化了正确的类型。构造函数生成正确类型的窗口。然后主程序调用一个虚拟的 Run 方法。控制台实现调用 main 的等价物。GUI 实现运行一个事件循环。

如果您是从命令行启动的(而不是启动自己的控制台窗口),那么真正困难的部分是附加到现有的控制台窗口。Devstudio 通过拥有 devstudio.com 和 devstudio.exe 来做到这一点,但它相当复杂。

于 2012-08-28T21:21:35.090 回答
1

在编译阶段执行此操作很简单,使用条件编译。

您的配置文件将包含您想要的预处理器定义。例如

#define GUI

或者

#define CONSOLE

然后将配置文件包含在要以不同方式编译的每个文件中

#include "gui_or_console.h"

最后,您使用条件编译来告诉编译器要处理哪些代码

#idfef GUI

  // some GUI code

#endif

#ifdef CONSOLE

 // some CONSOLE code

#endif
于 2012-08-28T18:32:46.213 回答