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.)
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.
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.