刚开始写程序建的就是控制台工程,但直到今天才大致搞明白控制台应用程序是怎么回事,下面对其做一个解释。
1.程序的入口点不同
这时最明显的区别,控制台程序的入口点是main,非控制台的入口点是WinMain。
但入口点并不能说明什么问题,入口点本身只是一个可以指定给编译器的选项:
如上,可以在连接选项中对入口点进行设定。
2.控制台应用程序可以弹出黑框框
这个也是控制台程序和非控制台程序之间的一个明显区别。
但其实非控制台程序也可以弹出黑框框:
AllocConsole(); // 弹出控制台黑框框 MessageBox(NULL, "Dongyu\n", "MyBox", MB_OKCANCEL); FreeConsole(); // 控制台黑框框消失
如上,在Win32程序中只需要调用AllocConsole函数就可以把那个黑框框创建出来。至于使用printf之类的向其中写入字符等用法,可以参考一篇文章:http://blog.csdn.net/lzhlzz/article/details/6593614
除了这两个区别,之前以为还是有另外一些区别的,一个是控制台程序不能创建窗口,另一个是控制台程序可以运行在Dos环境下而非控制台程序不可以,但其实并不是这样:
1.控制台程序是可以创建窗口的:
int main() { char ch1; scanf("%c", &ch1); if ('n' == ch1) { MessageBox(NULL, "Dongyu\n", "MyBox", MB_OK); } return 0; }
如上,只要包含了windows.h头文件,就可以进行创建窗口的操作。
2.控制台程序并不能运行在Dos环境下:
关于控制台程序和Dos程序的区别可以参考一篇帖子:http://topic.csdn.net/t/20040928/13/3415805.html
总结:
1.Win32 Application和Win32 Console Application都是Win32程序,其文件格式都是PE格式,只不过Console程序文件里有一个字段专门标明这个程序是Console程序。
2.Console程序的特殊之处在于程序加载前进行了AllocConsole的操作,创建了一个Console框,并可以在其中进行输入输出的操作。
3.除此之外Console程序并无特别,一样可以像普通的Win32程序那样创建窗口。
4.Console程序是特殊的Win32程序。
参考:
http://wenku.baidu.com/view/6ac2d5d5b14e852458fb5717.html