Debug Konsole für Win32 Programm öffnen

Atlanx

Mitglied
Borland Builder 6 C++
Ich würde gerne für mein Windowsprogramm eine Konsole öffnen, um mir Meldungen ausgeben zu lassen.

Ich hab das auch schon in meine Programm eingebaut, dank dieser Anleitung:
source: http://dslweb.nwnexus.com/~ast/dload/guicon.htm

Das hier ist also meine Funktion um die Ausgabestreams umzubiegen:
(Ich hab die Funktion zum Testen jetzt mal ins Hauptprogramm eingebaut, weil
es als Include nicht funktioniert hat.)

Code:
--[ Testprogramm]---------------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "IGL.h"
#include "IGL3D.h"

#include <fcntl.h>  // osfhandle
#include <io.h>     // osfhandle
#include <iostream>

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

void RedirectIOToConsole()
{
    int hConHandle;
    long lStdHandle;
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    FILE *fp;

    // allocate a console for this app
    AllocConsole();

    // set the screen buffer to be big enough to let us scroll text
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&coninfo);
    coninfo.dwSize.Y = 500;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),coninfo.dwSize);

    // redirect unbuffered STDOUT to the console
        lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
        hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
        fp = _fdopen( hConHandle, "w" );
        *stdout = *fp;
        setvbuf( stdout, NULL, _IONBF, 0 );
    // redirect unbuffered STDERR to the console
        lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
        hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
        fp = _fdopen( hConHandle, "w" );
        *stderr = *fp;
        setvbuf( stderr, NULL, _IONBF, 0 );
    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
    // point to console as well
        ios::sync_with_stdio();
}

Beim Starten des Programms wird die Initialisierung ausgeführt:

void __fastcall TForm1::FormActivate(TObject *Sender)
{
         RedirectIOToConsole();
        wcout << L"xxx"<< endl;
        wcout << "xxx" << endl;
 }

Und im Programm rufe ich dann diese Funktionen zum Schreiben in das Konsolenfenster auf:

void RedrawAll()
{
    wcout << L"Test output to wcerr" << endl;
    wclog << L"Test output to wclog" << endl; 
}

Soweit so gut. Mein Programm läuft und das Konsolenfenster öffnet sich.

Nur leider erscheint keine meiner Ausgaben in dem Konsolenfenster.

Hat irgendjemand eine Idee woran das liegen könnte?

Vielen Dank.
 
Berichtigung: Es funktioniert zum Teil. Das umbiegen von STDIN hat funktioniert, wie ich grad überprüft habe, aber dieses fuc***** Stdout und Stderr funktioniert vielleicht, aber das juckt die Konsole von Windows einen Dreck.

Windows zeigt sich in keiner Weise angesprochen mir das, was ich in STDOUT schreibe, in der Konsole auch anzuzeigen :mad:
 
Zurück