• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Ogre App添加Console的方法

            Posted on 2008-08-18 09:28 美洲豹 閱讀(348) 評論(0)  編輯 收藏 引用
            以前一直想添加一個Console用于調試,后來在OgreWiki的HOWTO中查到了一個,其中推薦的方法如下:
            Console.h如下:
            #include <stdio.h>
            #include <fcntl.h>
            #include <io.h>
            #include <iostream>
            #include <string>

            extern void showWin32Console();

            void showWin32Console()
            {
                static const WORD MAX_CONSOLE_LINES = 500;
                int hConHandle;
                long 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 = (long)GetStdHandle(STD_OUTPUT_HANDLE);
                hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
                fp = _fdopen( hConHandle, "w" );
                *stdout = *fp;
                setvbuf( stdout, NULL, _IONBF, 0 );
                // redirect unbuffered STDIN to the console
                lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
                hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
                fp = _fdopen( hConHandle, "r" );
                *stdin = *fp;
                setvbuf( stdin, NULL, _IONBF, 0 );
                // redirect unbuffered STDERR to the console
                lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
                hConHandle = _open_osfhandle(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
                std::ios::sync_with_stdio();
            }

            而后,在main.cpp中如下使用即可:
            /*
            -----------------------------------------------------------------------------
            Filename:    OgreAnimationTest.cpp
            -----------------------------------------------------------------------------

            This source file is generated by the Ogre AppWizard.

            Check out: http://conglomerate.berlios.de/wiki/doku.php?id=ogrewizards

            Based on the Example Framework for OGRE
            (Object-oriented Graphics Rendering Engine)

            Copyright (c) 2000-2007 The OGRE Team
            For the latest info, see http://www.ogre3d.org/

            You may use this sample code for anything you like, it is not covered by the
            LGPL like the rest of the OGRE engine.
            -----------------------------------------------------------------------------
            */

            #include "OgreAnimationTest.h"

            #include "Console.h"


            #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
            #define WIN32_LEAN_AND_MEAN
            #include "windows.h"
            #endif

            #ifdef __cplusplus
                extern "C" {
            #endif

            #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
                    INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
            #else
                    int main(int argc, char *argv[])
            #endif
                    {
                        // Create application object
                        OgreAnimationTestApp app;

                        showWin32Console();

                        try {
                            app.go();
                        } catch( Ogre::Exception& e ) {
            #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
                            MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
            #else
                            std::cerr << "An exception has occured: " <<
                                e.getFullDescription().c_str() << std::endl;
            #endif
                        }

                        FreeConsole();

                        return 0;
                    }

            #ifdef __cplusplus
                }
            #endif

            用showWin32Console()及FreeConsole()即可,在其他程序段中,所有的用printf,cout輸出的結果將重定向到這個console中,方便調試。

            posts - 15, comments - 2, trackbacks - 0, articles - 29

            Copyright © 美洲豹

            精品一区二区久久| 国产精品99精品久久免费| 国内精品久久久久久麻豆| 精品无码久久久久久国产| 亚洲国产婷婷香蕉久久久久久| 久久无码高潮喷水| 99久久中文字幕| 亚洲午夜久久久| 99国产精品久久| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久99精品国产麻豆宅宅| 久久久久女人精品毛片| 国产伊人久久| 人妻精品久久无码专区精东影业| 欧美亚洲国产精品久久蜜芽| 国产精品一区二区久久精品涩爱| 久久国产精品77777| 精品久久久久成人码免费动漫| 国产精品久久久久久吹潮| 日本久久中文字幕| 99久久精品毛片免费播放| 久久精品卫校国产小美女| 久久精品国产亚洲av瑜伽| 亚洲人成网亚洲欧洲无码久久| 国内精品久久久久久中文字幕| 99久久免费国产精品热| 亚洲国产精品无码久久| 91麻豆国产精品91久久久| 久久久免费观成人影院| 青青青伊人色综合久久| 国产一区二区三区久久精品| 久久精品午夜一区二区福利| 伊人色综合久久天天人手人婷| 久久久久国色AV免费看图片| 国产高潮久久免费观看| 久久精品国产亚洲沈樵| 久久精品国产91久久综合麻豆自制 | 久久激情亚洲精品无码?V| 99久久精品国产一区二区三区| 久久成人精品视频| 国产午夜精品理论片久久影视 |