- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 WinMain 中有以下片段,我正在从控制台启动这个 GUI 应用程序。我想将输出重定向到启动我的应用程序的控制台。我收到“句柄无效”。 GetStdHandle() 后出错。
但是,如果我使用 AllocConsole 而不是 AttachConsole,它工作正常。此外,如果我使用 STD_ERROR_HANDLE 而不是 STD_OUTPUTHANDLE,则 fprintf(stderr, "errror") 可以正常工作。
我看到一个博客条目有同样的问题但没有解决方案。我在 64 位 Windows 7 上使用 vc 2010 编译器。
谢谢!
bConsole = AttachConsole(ATTACH_PARENT_PROCESS) != FALSE;
if (bConsole)
{
int fd = 0;
long lStdOut;
lStdOut = (long)GetStdHandle(STD_OUTPUT_HANDLE);
fd = _open_osfhandle(lStdOut, _O_TEXT);
if (fd > 0)
{
*stdout = *_fdopen(fd, "w");
setvbuf(stdout, NULL, _IONBF, 0 );
}
}
printf("Test!!!!!!!!!!!!");
最佳答案
AttachConsole
确实将您的进程与控制台相关联,但是 stdout
已经打开(并连接到旧句柄,无论它是什么)。
直接覆盖 stdout
是个糟糕的主意。相反,您必须 freopen("CONOUT$", "w", stdout);
让 stdout
进入控制台。
但是还有很多其他的小细节。看看我的问题Where do writes to stdout go when launched from a cygwin shell, no redirection这涵盖了您在问题中的问题,然后询问有关某些极端情况的问题。最后有一个包含所有内容的代码示例。
关于c win32 api - GetStdHandle(STD_OUTPUT_HANDLE) 无效,很费解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5115569/
我的 WinMain 中有以下片段,我正在从控制台启动这个 GUI 应用程序。我想将输出重定向到启动我的应用程序的控制台。我收到“句柄无效”。 GetStdHandle() 后出错。 但是,如果我使用
这个问题已经有答案了: Why does WriteFile crash when writing to the standard output? (2 个回答) 已关闭 6 年前。 我有一个应用程序
如何使用 SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c) 当我没有 1 个“c”参数而是 2 个参数(例如 2 3)时起作用
我是一名优秀的程序员,十分优秀!