在Win32应用程序中添加控制台窗口

来源:互联网 发布:苏拉病毒源码 编辑:程序博客网 时间:2024/05/17 07:38

1.  背景知识介绍

1.Win32 Handles和RTL Handles
标准C定义的文件操作类型为FILE*
Win32 API定义文件操作的类型为 HANDLE,  在Windows平台上, 标准C的输入输出函数是HANDLE实现, 标准C的输入输出FILE* 类型会和相应的HANDLE关联。
标准C函数预定义了三个FILE* 变量:  stdin, stdout和stderr
Win32 也分别定义了这三个HANDLE, 可以通过HANDLE GetStdHandle() 函数取得

GetStdHandle 参数:
STD_INPUT_HANDLE
STD_OUTPUT_HANDLE
STD_ERROR_HANDLE
这些HANDLE都可以重定向到文件或者控制台窗口,Win32 GUI程序没有控制台窗口,所以Win32的这三个File HANDLE也没有指向Standard input, output, error,  但是我们可以将这三个 FILE HANDLE重定向到控制台窗口,然后将标准C FILE* 关联到这些HANDLE。然后我们就可以正常使用C标准输入输出函数了。

其他用到的函数
_open_osfhandle() 函数, 返回一个RTL handle, 这个RTL handle与Win32  FILE HANDLE相关联, 通过这个RTL handle重定向I/O

FILE *_fdopen(int fd, const char *mode ); 基于文件描述符打开一个C输入输出流 


代码

 

测试

 

参考

http://www.halcyon.com/~ast/dload/guicon.htm