gpt4 book ai didi

c win32 api - GetStdHandle(STD_OUTPUT_HANDLE) 无效,很费解

转载 作者:行者123 更新时间:2023-12-04 11:10:16 24 4
gpt4 key购买 nike

我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com