Probleme beim Benutzen der Konsole



  • Hi,
    also man kann ja die Konsole und MFC nutzen, also mit dem code

    #include <io.h>
    #include <fcntl.h>
    #include <iostream.h>
    
    void close_console()
    {
    	FreeConsole();
    }
    
    void open_console()
    {
    	int fh;
    	AllocConsole();
    	SetConsoleTitle("Ultris Konsole");
    
    	fh = open("CON", _O_WRONLY);
    	*stdout = *fdopen(fh, "w");
    	setvbuf(stdout, NULL, _IONBF,0);
    
    	fh = open("CON", _O_RDONLY);
    	*stdin = *fdopen(fh, "r");
    	setvbuf(stdin, NULL, _IONBF, 0);
    
    	fh = open( "CON", _O_WRONLY);
    	*stderr = *fdopen(fh, "w");
    	setvbuf(stderr, NULL, _IONBF, 0);
    
    	cout.sync_with_stdio();
    	cin.sync_with_stdio();
    	cerr.sync_with_stdio();
    }
    

    wenn man dann open_console(); aufruft kann man befehle wie cin und cout nutzen.
    funktioniert auch bestens, nur wenn ich einmal die konsole geschlossen habe, und sie dann wieder öffne kann ich sie nicht mehr benutzen.
    Also es wird einfach nichts mehr ausgegeben. 😮
    Jemand ne idee worans liegt?

    edit: hab das problem gelöst, falls es jemanden interessiert: ich habe eine variable angelegt die den wert 1 hat wenn die konsole da ist, und 0 wenn sie nciht da ist. dann nur noch gemacht dass nur etwas ausgegeben wird wenn die variable den wert 1 hat, also die konsole da ist. denn wenn die konsole nicht da ist, also vorher geclosed wurde, und man dann versucht etwas auszugeben, funktioniert die ausgabe nicht mehr wenn man die konsole wieder öffnet. (war das verständlich? hab mich glaub ich bisschen shice ausgedrückct xD) naya warum genau das so ist weiß ich nicht, aber es funktioniert 🙂



  • hab ein ähnliches problem. hab mir den code von hier geklaut, der funktionierte auch immer -- bis gestern. aus heiterem himmel bekomm ich keine ausgabe mehr -- jedenfalls nicht per std::cout.
    besonders interessant dabei ist, dass das hier

    int conHandle;
    	long stdHandle;
    
    	FILE *fp;
    
    	// redirect unbuffered STDOUT to the console
    	stdHandle = (long)GetStdHandle( STD_OUTPUT_HANDLE );
    	conHandle = _open_osfhandle( stdHandle, _O_TEXT );
    
    	fp = _fdopen( conHandle, "w" );
    	*stdout = *fp;
    	setvbuf( stdout, NULL, _IONBF, 0 );
    
    	// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog point to console as well
    	std::ios::sync_with_stdio();
    
    	std::cout << "hallo" << std::endl;
    

    nicht funktioniert, das hier

    int conHandle;
    	long stdHandle;
    
    	FILE *fp;
    
    	// redirect unbuffered STDERR to the console
    	stdHandle = (long)GetStdHandle( STD_ERROR_HANDLE );
    	conHandle = _open_osfhandle( stdHandle, _O_TEXT );
    
    	fp = _fdopen( conHandle, "w" );
    	*stderr = *fp;
    	setvbuf( stderr, NULL, _IONBF, 0 );
    
    	// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog point to console as well
    	std::ios::sync_with_stdio();
    
    	std::cerr << "hallo" << std::endl;
    

    aber schon. also cerr geht, cout nicht. und zwar seit gestern nachmittag. 😃

    ebenfalls interessant ist, dieses verhalten hier:

    std::cout << "bla" << std::endl;   //geht nicht
    	fprintf( stdout, "bla" );		//geht
    

    hat jemand einen alternativen vorschlag, wie man cout/cerr auf eine neu erstellte console umleiten könnte?

    <edit>
    hab grad raus gefunden, dass es funktioniert, wenn ich vorhergehende cout's wegnehme. hatte in 'nem konstruktor ein cout drin, die umleitung wurde erst danach durchgeführt. ab dann ging gar nichts mehr über cout raus -- hat dafür jemand 'ne erklärung?
    </edit>


Anmelden zum Antworten