gpt4 book ai didi

c++ - 如何将标准输出重定向到 Windows 应用程序中的某个可见显示?

转载 作者:IT老高 更新时间:2023-10-28 12:32:07 28 4
gpt4 key购买 nike

我可以访问做“好东西”的第三方库。它向标准输出发出状态和进度消息。在控制台应用程序中,我可以很好地看到这些消息。在 Windows 应用程序中,它们只是进入比特桶。

是否有一种相当简单的方法可以将 stdout 和 stderr 重定向到文本控件或其他可见位置。理想情况下,这不需要重新编译第三方代码。它只会拦截低水平的 Steam 。我想要一个解决方案,我只需#include header ,调用初始化函数并链接库,如...

#include "redirectStdFiles.h"

void function(args...)
{
TextControl* text = new TextControl(args...);
initializeRedirectLibrary(text, ...);

printf("Message that will show up in the TextControl\n");
std::cout << "Another message that also shows up in TextControl\n";
}

如果它使用一些我可以覆盖的界面,这样它就不会绑定(bind)到任何特定的 GUI 库,那就更好了。

class StdFilesRedirector
{
public:
writeStdout(std::string const& message) = 0;
writeStderr(std::string const& errorMessage) = 0;
readStdin(std::string &putReadStringHere) = 0;
};

我只是在做梦吗?或者有人知道可以做这样的事情吗?

在两个答案后编辑:我认为使用 freopen 重定向文件是一个很好的第一步。对于完整的解决方案,需要创建一个新线程来读取文件并显示输出。对于调试,在 cygwin shell 窗口中执行 'tail -f' 就足够了。对于更精致的应用程序......这就是我想要写的......创建线程等需要一些额外的工作。

最佳答案

您需要创建管道(使用 CreatePipe() ),然后使用 SetStdHandle() 将 stdout 附加到它的写入端,然后您可以使用 ReadFile() 从管道的读取端读取并将您从那里获得的文字放在您喜欢的任何地方。

关于c++ - 如何将标准输出重定向到 Windows 应用程序中的某个可见显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573724/

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