场景一:
用户双击exe时,除了打开程序窗口外,你还希望打开一个控制台窗口,用于输出调试信息。
这种场景下,你需要创建一个Console窗口,并把std::cout输出流定位到这个窗口上,如下代码所示:
#include <iostream>
#include <fcntl.h>
#include <Windows.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
if (!::AttachConsole(ATTACH_PARENT_PROCESS)) {
if (::AllocConsole()) {
FILE* unused;
if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
_dup2(_fileno(stdout), 1);
}
if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
_dup2(_fileno(stdout), 2);
}
std::ios::sync_with_stdio();
}
}
AllocConsole方法负责创建一个Console窗口。
场景二:
当用户在控制台窗口,通过命令行启动你的应用程序时,你希望向用户打开的控制台窗口输出信息。
这种场景下,你只要附加当前控制台窗口即可,如下代码所示:
#include <iostream>
#include <fcntl.h>
#include <Windows.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
if (::AttachConsole(ATTACH_PARENT_PROCESS)) {
FILE* unused;
if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
_dup2(_fileno(stdout), 1);
}
if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
_dup2(_fileno(stdout), 2);
}
std::ios::sync_with_stdio();
}
AttachConsole方法负责附加当前控制台窗口。
程序运行效果如下图所示:


4636

被折叠的 条评论
为什么被折叠?



