Ich habe Zugriff auf eine Drittanbieter-Bibliothek, die "gute Sachen" macht. Es gibt Status- und Fortschrittsmeldungen an stdout aus. In einer Konsolenanwendung kann ich diese Nachrichten gut sehen. In einer Windows-Anwendung gehen sie einfach in den Bit-Bucket.Wie kann ich stdout auf eine sichtbare Anzeige in einer Windows-Anwendung umleiten?
Gibt es eine ziemlich einfache Möglichkeit, stdout und stderr zu einem Textsteuerelement oder einem anderen sichtbaren Ort umzuleiten. Idealerweise würde dies keine Neukompilierung des Drittanbietercodes erfordern. Es würde nur die Dämpfe auf niedrigem Niveau abfangen. Ich würde eine Lösung wie, wo ich den Header nur # include, rufen Sie die Funktion zur Initialisierung und verknüpfen Sie die Bibliothek wie 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";
}
Noch besser wäre es, wenn es einige Schnittstelle verwendet, die ich überschreiben könnte, so ist es nicht an eine bestimmte GUI-Bibliothek gebunden.
class StdFilesRedirector
{
public:
writeStdout(std::string const& message) = 0;
writeStderr(std::string const& errorMessage) = 0;
readStdin(std::string &putReadStringHere) = 0;
};
Träume ich gerade? Oder weiß jemand etwas, das so etwas kann?
Bearbeiten nach zwei Antworten: Ich denke, mit Freopen zum Umleiten der Dateien ist ein guter erster Schritt. Für eine vollständige Lösung müsste ein neuer Thread erstellt werden, um die Datei zu lesen und die Ausgabe anzuzeigen. Für das Debugging wäre es ausreichend, ein 'tail -f' in einem Cygwin-Shell-Fenster zu machen. Für eine ausgefeiltere Anwendung ... Was ich schreiben möchte ... es würde etwas zusätzliche Arbeit geben, um den Thread usw. zu erstellen.
'AllocConsole' ist das fehlende Stück. Es erzeugt das vertraute Konsolenfenster. Die Lese- und Schreibfunktionen sind umständlich, aber du kannst stdout/stdin ganz einfach auf diese Weise umleiten: https://stackoverflow.com/a/15547699/133836 –