[转载]在Win32应用程序中启用控制台Console输出
在某些时候,我们可能需要在Win32窗口应用程序中打开控制台窗口,打印一些消息,或者作为当前程序的另外一个人机交互界面,或者为了帮助调试程序。为了达到这种效果,需要了解函数AllocConsole和C-Runtime的freopen函数。
AllocConsole函数会为当前的窗口程序申请一个Console窗口。这是MSDN上对AllocConsole的介绍:ALLOCCONSOLE
在为当前窗口程序申请到console后,我们需要调用C-Runtime的freopen函数将标准输出(stdout)重定位到新申请的console。
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
);
我们调用的时候是这么着传入参数的: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!");
}
{
freopen("CONOUT$","w",stdout);
printf("hello, world!");
}
以上内容转载于:
********************************************************************************************
//在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;
}
在程序启动时调用该函数即可