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

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值