You are here

Konsolen-Fenster für GUI-basierte Windowsprogramme

Ich benutze dieses Fenster für Diagnose-Ausgaben in Release-Versionen. Visual C++ hat leider die unangenehme Eigenschaft cin, cout und cerr nicht richtig zu initialisieren, wenn man eine nicht-textbasierte Anwendung ausführt, d.h. man kann in einer Anwendung, die auf Fenstern basiert, nicht mit cout etwas in ein Konsole-Fenster ausgeben.

Die Lösung für dieses Problem ist natürlich, einen eigenen Ausgabe-Stream zu entwerfen, der mit einem Konsolen-Fenster verknüpft ist. Die Implementierung ist so einfach, dass sie zu eigenen Experimenten nahezu einlädt.

Einen Stream zu implementieren, das hört sich zunächst sehr kompliziert an. Es ist aber viel einfacher als man denkt, da das Design der Stream-Basisklassen auf Erweiterung ausgelegt wurde. Dies wurde möglich, indem man die Implementierung eines Streams auf zwei Klassen verteilt hat. Eine äussere Klasse (basic_istream, basic_ostream) stellt die Schnittstelle zu der inneren Klasse (basic_streambuf) dar, welche die eigentliche Aus-/Eingabe in das Gerät bewerkstelligt. Gleichzeitig kuemmert sich die äussere Klasse um die Formatierung. Alle Ausgabe-Streams sind von basic_ostream abgeleitet. Daraus ergibt sich, dass fuer die Entwicklung eines neuen Streams nur die innere Klasse verändert werden muss. Die äussere Klasse bleibt unverändert (natürlich muss ihr die neue innere Klasse zugeordnet werden). Genug der Vorrede: