zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    scrapy怎么设置带有密码的代理ip base64.encodestring不能用 python3.5,base64库里面的encodestring()被换成了什么?
    ace模板dataTables_length控制是否显示分页
    Django AUTHENTICATION_BACKENDS
    Django自定义User模型和登录验证
    一个简单的django user.is_authenticated问题
    PHP函数(四)-变量函数
    PHP函数(三)-递归函数
    Python多进程
    Python多线程-生产者消费者模型
    Python多线程-队列
  • 原文地址:https://www.cnblogs.com/swordzj/p/2034742.html
Copyright © 2011-2022 走看看