【问题标题】:How to show and output to the console (cmd) on Windows (C++ WinApi) under `SUBSYSTEM:WINDOWS`如何在“SUBSYSTEM:WINDOWS”下的 Windows (C++ WinApi) 上显示和输出到控制台 (cmd)
【发布时间】:2019-03-21 14:52:01
【问题描述】:

我见过同时使用 Window 和控制台操作的 Windows 应用程序。我发现自己时不时地想知道这个问题,我记得每当我研究它时,我都找不到解决方案。

有没有办法对我的 WinApi C++ 应用程序进行编程,以便我可以像在链接器选项 SUBSYSTEM:CONSOLE 下通常那样输出到控制台?换句话说,我可以打开一个窗口,使用我的WinMainWndProc 等,但我也想做std::coutstd::cinstd::wcout.. 一个很好的用例,会是使用控制台来记录东西和窗口作为主应用程序。

改用std::system() 并从中启动cmd 然后输出会是个好主意吗?我不这么认为,但我当然不知道。

Windows 8.1、x86_64、MSVS 2017。

【问题讨论】:

标签: c++ c windows visual-studio winapi


【解决方案1】:

使用AttachConsole 附加到现有控制台,或使用AllocConsole 创建新控制台。然后根据需要将cin/cout 重定向到该控制台(取决于编译器特定运行时实现的要求)。或者,改用ReadConsole/WriteConsole

【讨论】:

  • 这看起来很老套。要求示例代码会不会太过分了?感谢您的回答。
  • @Nik-Lz 一个写入控制台的非控制台应用程序一开始就很麻烦。如果你用谷歌搜索的话,我提到的函数有很多例子
【解决方案2】:

是的,将子系统设置为 WINDOWS 并将 /ENTRY(入口点)设置为 WinMainCRTStartup(或 wWinMainCRTStartup,如果您使用的是 unicode)。您甚至可以只为 Debug 配置设置它,这样控制台就不会出现在 Release 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多