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

结合基于控制台和基于windows的应用程序,windows,winapi,console-application,iostream,cout,Windows,Winapi,Console Application,Iostream,Cout,虽然在我的应用程序中,我使用DirectX和一个常用的WinMain函数,但如果应用程序是用特定参数启动的,我可能希望创建到控制台的输出(使用常用的std::cout)。让我们保持简单:如果用户使用--help参数调用应用程序,则应显示一些帮助(使用boost::program_options);否则,一切都应该通过创建窗口等方式正常工作 即使在windows应用程序中,如何将输出写入控制台(如果通过控制台调用应用程序) 背景信息:一般的想法是,在运行我的游戏引擎之前,我将能够运行一些工具(外

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

即使在windows应用程序中,如何将输出写入控制台(如果通过控制台调用应用程序)


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



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

如果您只需要为WinMain GUI应用程序创建一个控制台窗口,那么您需要调用函数。每个进程只能有一个

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

}
#包括
WinMain(…){
//解析命令行并检查是否提供了--help
AllocConsole();//为进程分配控制台窗口
freopen(“CON”,“w”,stdout);//将输出重定向到控制台
printf(…);//测试输出到控制台窗口
FreeConsole();//从控制台窗口分离进程
//继续这里
}

如果您需要在GUI应用程序中使用诸如
printf
之类的函数来显示某些内容,则这将仅根据需要创建控制台窗口。它不会使您的应用程序同时具有控制台和GUI子系统。您需要两个.exe,因此您当前的方法是正确的