Ho accesso a una libreria di terze parti che fa "cose buone". Invia messaggi di stato e di avanzamento allo stdout. In un'applicazione Console posso vedere questi messaggi bene. In un'applicazione Windows vanno semplicemente al pozzetto.Come posso reindirizzare lo stdout su un display visibile in un'applicazione Windows?
C'è un modo abbastanza semplice per reindirizzare lo stdout e lo stderr in un controllo di testo o in un'altra posizione visibile. Idealmente, questo non richiederebbe alcuna ricompilazione del codice di terze parti. Sarebbe solo intercettare i vapori a un livello basso. Vorrei una soluzione in cui ho appena # include l'intestazione, chiamare la funzione di inizializzazione e collegare la libreria come 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";
}
Ancora meglio sarebbe se utilizzato qualche interfaccia che ho potuto ignorare così è non legato a nessuna libreria della GUI particolare.
class StdFilesRedirector
{
public:
writeStdout(std::string const& message) = 0;
writeStderr(std::string const& errorMessage) = 0;
readStdin(std::string &putReadStringHere) = 0;
};
Sto solo sognando? O qualcuno sa qualcosa che può fare qualcosa di simile?
Modifica dopo due risposte: Penso che l'utilizzo di freopen per reindirizzare i file sia un buon primo passo. Per una soluzione completa ci dovrebbe essere un nuovo thread creato per leggere il file e visualizzare l'output. Per il debug, fare un 'tail -f' in una finestra shell cygwin sarebbe sufficiente. Per un'applicazione più lucida ... Qual è quello che voglio scrivere ... Ci sarebbe qualche lavoro in più per creare il thread, ecc.
'AllocConsole' è il pezzo mancante. Produce la consueta finestra della console. Le funzioni di lettura e scrittura sono scomode, ma puoi facilmente reindirizzare stdout/stdin in/da esso con questo metodo: https://stackoverflow.com/a/15547699/133836 –