我想写一个C ++程序,使得根据一个configuration文件可以是一个控制台应用程序或窗口应用程序。 对于我使用WxWidget的GUI。 我应该在Windows和Linux(Buntu)中分别做些什么。
有人可以提供一些简单的例子?
在编译阶段要做到这一点很简单,使用条件编译。
你的配置文件将包含你想要的预处理器定义。 例如
#define GUI
要么
#define CONSOLE
然后,将配置文件包含在每个要编译的文件中
#include "gui_or_console.h"
最后,你使用条件编译来告诉编译器处理哪个代码
#idfef GUI // some GUI code #endif #ifdef CONSOLE // some CONSOLE code #endif
在运行时执行此操作的典型方法是编译并将您的程序作为Windows应用程序链接。 在运行时你阅读配置。 如果它是为GUI设置的,那么创建窗口,并在你的路上。 如果它被设置为控制台模式,那么你可以创建一个控制台窗口,将stdout / stdin / sterr流添加到它,然后离开你。
我写了一个这样运行的程序。 整个UI被抽象为纯虚拟接口,具体的实现提供了一个控制台实现和一个GUI实现。 在运行时,我实例化正确的类型。 构造函数使窗口的类型正确。 主程序然后调用一个虚拟的Run方法。 控制台实现调用main的等价物。 GUI实现运行一个事件循环。
如果你从一个命令行启动(而不是启动你自己的控制台窗口),那么真正困难的部分是附加到现有的控制台窗口。 Devstudio通过拥有一个devstudio.com和devstudio.exe来完成这个工作,但是它相当复杂。