• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
梦之奈落
博客园    首页    新随笔    联系   管理    订阅  订阅

[转载]在Win32应用程序中启用控制台Console输出

在某些时候,我们可能需要在Win32窗口应用程序中打开控制台窗口,打印一些消息,或者作为当前程序的另外一个人机交互界面,或者为了帮助调试程序。为了达到这种效果,需要了解函数AllocConsole和C-Runtime的freopen函数。
AllocConsole函数会为当前的窗口程序申请一个Console窗口。这是MSDN上对AllocConsole的介绍:
ALLOCCONSOLE

 

The AllocConsole function allocates a new console for the calling process.

BOOL AllocConsole(void);
函数调用成功,返回非零值,调用不成功则返回0.

在为当前窗口程序申请到console后,我们需要调用C-Runtime的freopen函数将标准输出(stdout)重定位到新申请的console。
freopen的原型如下:
FILE *freopen( 
   
const char *path,
   
const char *mode,
   FILE 
*stream 
);
我们调用的时候是这么着传入参数的:
freopen("CONOUT$","w",stdout);
其中"CONOUT$"是指代当前console的特殊字符串,"w"表明以written模式打开这个console,stdout指代的是系统的标准输出设备。


下面是整个的代码:

if(AllocConsole())
 
{
  freopen(
"CONOUT$","w",stdout);
  printf(
"hello, world!");
 }
 
以上内容转载于:
http://www.cppblog.com/hugai/archive/2009/05/17/83196.html
 
********************************************************************************************
 
以下内容转载于:http://blog.csdn.net/winux/article/details/134707

在Windows程序中打开控制台的程序

//在Windows程序中打开控制台的程序
#include <stdio.h>
#include <io.h>
#include <fcntl.h>

BOOL CreateConsole(void)
{
  FreeConsole();        
  if ( AllocConsole() )
   {
         int hCrt = _open_osfhandle((long)
     GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
         *stdout = *(::_fdopen(hCrt, "w"));
     ::setvbuf(stdout, NULL, _IONBF, 0);
     *stderr = *(::_fdopen(hCrt, "w"));
     ::setvbuf(stderr, NULL, _IONBF, 0);
         return TRUE;
    }return FALSE;
}
在程序启动时调用该函数即可



http://blog.sciencenet.cn/blog-268489-564585.html 

posted @ 2012-05-12 14:52  梦之奈落  阅读(615)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3