在某些時候,我們可能需要在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!");
}