结合基于控制台和基于Windows的应用程序

时间:2013-03-09 19:15:58

标签: windows winapi console-application iostream cout

虽然我在我的应用程序中使用通常WinMain函数的DirectX,但如果应用程序是使用特定参数启动的话,我想要创建输出到控制台(通常为std::cout)。让我们保持简单:如果用户使用--help参数调用应用程序,则应显示一些帮助(使用boost::program_options);否则,一切都应该通过创建一个窗口等来工作。

即使在我的Windows应用程序中,如何将输出写入控制台(如果应用程序是通过一个调用的)?


背景信息:一般的想法是,在运行我的游戏引擎之前,我可以运行一些工具(外部工具,或包含在引擎中)并获得它们的输出。


当前的方法。我现在有两个独立的应用程序,一个启动器和引擎,但是我希望尽可能合并它们。

1 个答案:

答案 0 :(得分:2)

如果只需要为WinMain GUI应用程序创建控制台窗口,则需要调用AllocConsole函数。每个流程仅限一个。

C ...中的示例

#include <stdio.h>

WinMain( ... ) {

    // parse the command line and check if --help is given

    AllocConsole(); // allocates console window for your process

    freopen("CON", "w", stdout); // redirects output to console

    printf( ... ); // test output to the console window

    FreeConsole(); // detaches your process from the console window

    // continue here

}

如果您需要使用GUI应用程序中的printf等函数显示某些内容,则只能按需创建控制台窗口。它不会使您的应用程序同时具有控制台和GUI子系统。你需要两个.exe,所以你当前的方法是正确的。