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

     
  • 相关阅读:
    Android中ProgressDialog的应用
    Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag
    android onKeydown
    8 个最优秀的 Android Studio 插件
    Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
    Android提供的LruCache类简介
    Android设计中的.9.png与Android Studio中的设置
    js实现双击后网页自己主动跑-------Day55
    Oracle经常使用函数
    《R实战》读书笔记三
  • 原文地址:https://www.cnblogs.com/swordzj/p/2034742.html
Copyright © 2011-2022 走看看