MFC中重定向stdout,可以使用cout了!

 原始出处在:http://www.halcyon.com/~ast/dload/guicon.htm.

我修改了一下,合并成一个头文件guicon.h,在vs2005中调试通过,修改了部分代码以适应64bit的编译,用法就不多说了,只要在使用前调用RedirectIOToConsole(),一次就可以了。 很简单的。

#ifndef __GUICON_H__

#define __GUICON_H__

#ifdef _DEBUG

#include 
<windows.h>

#include 
<stdio.h>

#include 
<fcntl.h>

#include 
<io.h>

#include 
<iostream>

#include 
<fstream>

#ifndef _USE_OLD_IOSTREAMS

using namespace std;

#endif

// maximum mumber of lines the output console should have

static const WORD MAX_CONSOLE_LINES = 500;

void RedirectIOToConsole();

void RedirectIOToConsole()

{

    
int hConHandle;

    HANDLE
 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 
= MAX_CONSOLE_LINES;

    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), 

        coninfo.dwSize);

    
// redirect unbuffered STDOUT to the console

    lStdHandle 
= GetStdHandle(STD_OUTPUT_HANDLE);

    hConHandle 
= _open_osfhandle((INT_PTR)lStdHandle, _O_TEXT);

    fp 
= _fdopen( hConHandle, "w" );

    
*stdout = *fp;

    setvbuf( stdout, NULL, _IONBF, 
0 );

    
// redirect unbuffered STDIN to the console

    lStdHandle 
= GetStdHandle(STD_INPUT_HANDLE);

    hConHandle 
= _open_osfhandle((INT_PTR)lStdHandle, _O_TEXT);

    fp 
= _fdopen( hConHandle, "r" );

    
*stdin = *fp;

    setvbuf( stdin, NULL, _IONBF, 
0 );

    
// redirect unbuffered STDERR to the console

    lStdHandle 
= GetStdHandle(STD_ERROR_HANDLE);

    hConHandle 
= _open_osfhandle((INT_PTR)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();

}



//End of File
#endif
#endif

 
原文地址:https://www.cnblogs.com/swordzj/p/2034742.html