注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Kandy

长风破浪会有时,直挂云帆济沧海!

 
 
 

日志

 
 

win32 application 和win32 console application 的区别  

2009-03-05 15:07:43|  分类: WIndows程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        今天在写一个时钟的程序的时候突然碰到了一个小小的问题,程序代码每次编译的时候都会出现两个错误:

Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/TimerDemo.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

TimerDemo.exe - 2 error(s), 0 warning(s)

        仔细的检查代码但没有发现任何错误,并且错误报告里面也没有涉及到代码的语法错误的提示,所以我就估计是编译器在捣鬼,经过几天的查找书籍,终于找到了原因以及解决的方法。

       一般情况下,在运行VC6.0的时候,如果我们不涉及到MFC编程的话,都会毫不犹豫的创建一个win32 console application 项目,我在编写这个程序的时候就是因为创建了一个win32 console application 项目,导致每次编译都不能通过。后来才发现我的这个程序必须在win32 application 项目文件里面才可以正常运行。

       现在我就两者的区别和联系介绍一下,以及如何创建适合我们的项目的工程。

Win32  application是基于WINDOWS平台的32位开发环境开发应用程序,SDK程序。
Win32  Console application是基于DOS开发平台开发应用程序,不能使用与图形有关的函数,控制台程序。

1.EXE文件本身有区别:在文件头里(PE头)有一个标记表明该文件是Application还是Console
2.OS在创建对应的进程时,如果是Console,除了载入文件映像并开启进程外(这一点和Application相同),同时创建一个Console对象(就是那个黑黑的窗口)与之关联,而且这种关联是可以编程脱开的.
除此以外,就没什么区别了,在Console程序里调用相应的API也可以创建窗口,对话框什么的

Win32 Application和Win32 Console Application都是工作在32位Windows环境的程序。其中Win32 Application 就是普通的常见的窗口应用程序,当然有的界面做得比较个性化,比如圆形的、不规则形状的…… 它们都是所谓的GUI(Graphics User Interface图形用户接口),我们可以通过鼠标点击来完成控制。而Win32 Console Application(win32控制台应用程序) 往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,我们得用键盘输入各种命令来使用它;或者叫CUI(Character User Interface字符用户接口)。

vc6里Win32 Application和Win32 console Application的区别。

在运用VC6.0的生活我们还会经常遇到如下链接错误:
Linking... /subsystem:windows
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/TestWin.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
解决方法是:将project-settings-link的project options里的
/subsystem:windows 改成 /subsystem:console
原因:Win32 Application的入口函数为WinMain
Win32 Console Application的入口函数是main
换句话说,如果你编写传统的C程序,必须建立Win32 Console程序,但VC里面默认的是Win32 Application,于是上面提及的链接错误就就经常出现了,而Win32 Application和Win32 Console的区别就在于VC里链接参数不同。有人问如何才能使Console     Application运行完全后自动关闭其窗口。MS-Dos窗口只有在Debug时才会出现,编译之后,直接运行编译文件,关闭文件时窗口会自动关闭。你完全可以在console程序里面向对象,当然你在win32   application里也可以面向过程,不过当你使用MFC作为基础的话,面向过程可就捉襟见肘了。

 

  评论这张
 
阅读(251)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018