从今天起开始我的windows学习心得的日志,有兴趣的网友可以随时交流啊!
Windows支持两种类型的应用程序,一种是图形界面的,简称GUI,另一种是控制台程序,简称CUI。GUI拥有前端界面,用户通过图形界面与操作系统进行交互,一般是通过消息传递的方式完成的。CUI就是在“开始”->“运行”的文本框输入“cmd”后的黑色(默认)窗口。
使用VS(Visual Studio)建立windows项目时,有两个选项,如图:
![Windows编程学习日志(一)](http://img.aihuau.com/images/31101031/31022555t010584946905c133b2.jpg)
一个是win32控制台应用程序,一个是win32项目。初学C语言的人往往选择第二个,也就是win32项目,最后连简单的helloworld程序也无法正常编译通过,错误提示更是以“error LNK2019: 无法解析的外部符号_WinMain@16,该符号在函数 ___tmainCRTStartup中被引用”的形式展示,使初学者摸不着头脑,一般的解决办法是关闭现有项目,新建一个新的项目,选择win32控制台应用程序,那有没有其它办法解决呢?有的。
要理解使用什么方法,首先应该知道计算机启动一个C程序的过程,我们知道C程序是从main函数开始的,那在main函数之前呢,windows操作系统首先要给要启动的应用程序分配相应的资源,然后启动C/C++的运行时函数,该函数会寻找代码中的四个入口函数,它们分别是(此处参数皆省略)
int WINAPI WinMain
int WINAPI wWinMain
int __cdecl main
int __cdecl wmain
然而,在寻找前还要去判断链接程序开关:/SUBSYSTEM:WINDOWS和/SUBSYSTEM:CONSOLE,如果当前的开关是/SUBSYSTEM:WINDOWS则只寻找intWINAPI WinMain和int WINAPI wWinMain,如果当前开关是/SUBSYSTEM:CONSOLE则只寻找int__cdecl main和int __cdeclwmain,这就是我们提到的win32控制台应用程序和win32项目的区别,如果是win32控制台应用程序则开关是/SUBSYSTEM:CONSOLE的,即只寻找int __cdecl main和int __cdeclwmain,如果是win32项目则开关是/SUBSYSTEM:WINDOWS,即只寻找int WINAPI WinMain和intWINAPIwWinMain,明白了这一点,我们就可以找到解决问题的方法了,如果项目建错了,能否通过修改开关来使程序正常编译运行呢?可以的。
选择“项目”->“属性”,修改如图的设置即可。
修改完毕后,点击确定,重新编译运行,即可通过。