我可以访问做“好东西”的第三方库。它向标准输出发出状态和进度消息。在控制台应用程序中,我可以很好地看到这些消息。在 Windows 应用程序中,它们只是进入位桶。
是否有一种相当简单的方法可以将 stdout 和 stderr 重定向到文本控件或其他可见位置。理想情况下,这不需要重新编译第三方代码。它只会拦截低水平的蒸汽。我想要一个解决方案,我只需#include 标头,调用初始化函数并链接库,如...
#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";
}
如果它使用一些我可以覆盖的界面,这样它就不会绑定到任何特定的 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' 就足够了。对于更精致的应用程序......这就是我想要写的......将需要一些额外的工作来创建线程等。