Konsole für GUI-Programm

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.
 
Hallo!

Hast Du es eigentlich hinbekommen die Ausgabekonsole zu öffnen? Wäre auch interessiert an der Lösung... probiere schon seit Tagen rum! Bei Visual Studio 2005 geht das automatisch nur BorlandC++ 6 muckt da rum...

Grüße
 
Nach stundenlangen suchen hab ich endlich was gefunden und zwar ohne Quelltextwüsten.

Code:
//Konsole öffnen
AllocConsole();

//stdout umleiten
freopen("CONOUT$", "w", stdout);

printf("test");
FreeConsole();
 
Zurück