KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have access to a third party library that does "good stuff." It issues status and progress messages to stdout. In a Console application I can see these messages just fine. In a Windows application they just go to the bit bucket. Is there a fairly simple way to redirect stdout and stderr to a text control or other visible place. Ideally, this would not require any recompiles of the third party code. It would just intercept the steams at a low level. I'd like a solution where I just #include the header, call the initialization function and link the library as in... #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"; } Even better would be if it used some interface that I could override so it is not tied to any particular GUI library. class StdFilesRedirector { public: writeStdout(std::string const& message) = 0; writeStderr(std::string const& errorMessage) = 0; readStdin(std::string &putReadStringHere) = 0; }; Am I just dreaming? Or does anyone know of something that can do something like this? Edit after two answers: I think using freopen to redirect the files is a good first step. For a complete solution there would need to be a new thread created to read the file and display the output. For debugging, doing a 'tail -f' in a cygwin shell window would be enough. For a more polished application... Which is what I want to write... there would be some extra work to create the thread, etc.
Tags (comma-separated)
Save Edits
Cancel