У меня есть доступ к сторонней библиотеке, которая делает "хорошие вещи". Он выдает статус и сообщения о прогрессе на стандартный вывод. В консольном приложении я вижу эти сообщения просто отлично. В 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 для перенаправления файлов - хороший первый шаг. Для полного решения должен быть создан новый поток, чтобы прочитать файл и отобразить вывод. Для отладки было бы достаточно выполнить tail -f в окне оболочки cygwin. Для более отточенного приложения ... Что я хочу написать ... была бы дополнительная работа по созданию потока и т. Д.