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

本文介绍了一种在Visual Studio 2005中实现控制台输出重定向的方法,通过调用RedirectIOToConsole()函数,可以将标准输入、标准输出和标准错误输出重定向到控制台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 原始出处在: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、付费专栏及课程。

余额充值