У меня есть доступ к сторонней библиотеке, которая делает "хороший материал". Он выводит сообщения о статусе и прогрессе в стандартный вывод. В приложении "Консоль" я вижу эти сообщения просто отлично. В приложении Windows они просто переходят к ведро бит.
Есть ли простой способ перенаправления stdout и stderr в текстовый элемент управления или другое видимое место. В идеале это не потребует перекомпиляции кода третьей стороны. Это будет просто перехватывать пары на низком уровне. Мне нужно решение, где я просто # включаю заголовок, вызываю функцию инициализации и свяжу библиотеку, как в...
#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";
}
Еще лучше было бы, если бы он использовал какой-то интерфейс, который я мог бы переопределить, поэтому он не привязан к какой-либо конкретной библиотеке графического интерфейса.
class StdFilesRedirector
{
public:
writeStdout(std::string const& message) = 0;
writeStderr(std::string const& errorMessage) = 0;
readStdin(std::string &putReadStringHere) = 0;
};
Я просто мечтаю? Или кто-нибудь знает что-то, что может сделать что-то подобное?
Редактировать после двух ответов: Я думаю, что использование freopen для перенаправления файлов является хорошим первым шагом. Для полного решения потребуется новый поток, созданный для чтения файла и отображения вывода. Для отладки достаточно сделать "хвост -f" в окне оболочки cygwin. Для более полированного приложения... Вот что я хочу написать... будет некоторая дополнительная работа для создания потока и т.д.