2008-10-10 10 views
5

Hintergrund: Wir entwickeln Win32-Anwendungen und verwenden das "Thompson Toolkit" unter Windows, um uns eine unixartige Shell zu geben, die wir als unsere Befehlszeile verwenden.So schreiben Sie in einer GUI-Anwendung in die Konsole

Wir haben ein GUI-Programm (mit einer WinMain und Nachrichtenschleife), die wir in die Konsole schreiben wollen, aber printf usw. funktionieren nicht, auch wenn wir das Programm von der Konsole aus starten. Wie können wir von einem GUI-Programm auf die Konsole schreiben? Wir müssen dort Text drucken, damit ein automatisches Build-System Fehlermeldungen anzeigen kann und so weiter.

Danke.

+0

Dies scheint ein Duplikat einer anderen aktuellen Frage zu sein: [http://stackoverflow.com/questions/191842/how-do-i-get-console-output-in-c-with-a-windows-program ] (http://stackoverflow.com/questions/191842/how-do-i-get-console-output-in-c-with-a-windows-program) –

Antwort

0

irgendwo in den Visual Studio-Projekteinstellungen können Sie mit einer Konsole einschalten, vorausgesetzt, Sie verwenden VS. (Kann nicht sagen, wo, weil ich es derzeit nicht habe)

0

Anstatt auf der Konsole zu protokollieren, loggen Sie sich in eine Datei und verfolgen Sie die Datei dann mit einer separaten GUI-Anwendung. Dies hält die Konsole aufgeräumt und gibt Ihnen eine persistent Protokoll Ihres Protokolls, die gelegentlich sehr nützlich ist. Es gibt verschiedene Bibliotheken, die das meiste für Sie erledigen, oder Sie können es einfach halten und es einfach selbst machen.

+2

Sie können die Ausgabe nicht auf diese Weise an andere Programme weiterleiten . Und wenn ein Benutzer sich in eine Datei einloggen wollte, würde er sie in eine Datei pipen. Das Protokollieren in einer Datei ist nicht flexibel. – Roel

0

Grundsätzlich müssen Sie selbst eine Konsole mit AllocConsole, AttachConsole erstellen. Danach müssen Sie Standard-Handles mit GetStdHandle erhalten und "verbindet einen C-Laufzeitdateideskriptor mit einem vorhandenen Betriebssystem-Dateihandle" mit Hilfe von _open_osfhandle.

Das zurückgegebene Handle kann verwendet werden, um crt stdin und stdout zu überschreiben. Danach sollten alle CRT-Methoden wie printf funktionieren.