如何编写 C++ 控制台窗口程序

Posted

技术标签:

【中文标题】如何编写 C++ 控制台窗口程序【英文标题】:How to write a C++ Console-Window Program 【发布时间】:2012-08-28 03:38:11 【问题描述】:

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

谁能提供一些简单的例子?

【问题讨论】:

我很困惑,默认情况下所有 C++ 程序都应该通过控制台运行。你在问什么? 在 Windows 中,/SUBSYSTEM 链接器标志定义应用程序是否具有控制台窗口。 AFAIK,在 Linux 中,任何应用程序都可以在终端内或不使用终端执行,因此这不依赖于应用程序本身。 澄清@AlexFarber 所说的:在Windows 上不可能创建一个程序来确定它已经开始运行的子系统。如果您需要支持控制台,请使用main,然后在您确定应该运行 GUI 时调用FreeConsole 隐藏控制台。控制台仍会弹出,但无法绕过它。 请澄清您的问题。您是否希望配置文件控制应用程序的编译方式,即在构建开始时读取配置,或者应用程序如何运行,即应用程序本身开始运行时。 @Mehrdad:一种常见的解决方法是将代码放在 dll 中,然后将 .exe 与 GUI 子系统一起使用,将 .com 用作控制台子系统。如果你在控制台输入myapp,它会使用.com,然后让GUI快捷方式指向exe。 【参考方案1】:

在编译阶段使用条件编译很简单。

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

#define GUI

#define CONSOLE

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

#include "gui_or_console.h"

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

#idfef GUI

  // some GUI code

#endif

#ifdef CONSOLE

 // some CONSOLE code

#endif

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于如何编写 C++ 控制台窗口程序的主要内容,如果未能解决你的问题,请参考以下文章

怎么用c++编写一个Windows服务程序来监控另一个程序,崩溃后重新启动。

如何使用VS2013编写C语言? 包括编译连接和运行测试.

怎么用c++编写一个Windows服务程序来监控另一个程序,崩溃后重新启动。

用windows API 编写一个C++窗口

如何在Mac下编写并运行C++程序

如何使用vs2012编写c语言