windows应用程序和控制台应用程序的区别

windows 应用程序与控制台应用程序的区别

从表面上来看:控制台程序运行时是在DOS环境下,或者模拟dos环境运行的程序,运行时一般会启动一个提示符窗口。 而应用程序是Windows环境下的窗口程序。运行时一般会启动一个窗口画面。(例外,病毒木马,就不显示窗口,这决定于是否创建了窗口,或者是否让窗口显示)

但是,实质上,windows应用程序和控制台应用程序的真正区别是,PE文件的结构不同,这点不需要我们去关心,编译器会根据你的选择去构建生成的exe文件的PE结构。

如何告之编译器你的选择?在编译器进行连接的时候,给它一个连接参数:

subsystem:windows或者subsystem:console来告诉它。对于大多数编程工具来说一般在“工程->设置->连接”这个表单里面就可以看到这个参数。

但是通常在我们要创建一个新的工程的时候,编译器会让我们事先选择好是创建windows应用程序还是创建控制台应用程序。这个参数的设置就不用我们操心了。

补充(你可以不看,有点复杂了):事实上,控制台程序依然还有区别,那就是,16位的可以在DOS操作系统环境中运行的DOS程序(也可以在window运行通常windows会模拟一个dos环境,这时你会程序窗口与平时的提示符窗口明显不一样),和 32位通常只能在windows操作系统中运行的程序。通常32位控制台在DOS下运行,它的PE结构中会给予DOS环境下运行的一个入口点(DOS文件头),这个入口点只有“一行”代码:"This program cannot be run in DOS mode" 而在32位系统下,操作系统将将查看PE文件头里面的subsystem字段来获得程序将以什么方式运行(windoes或者console)这个字段里面指示了子系统(CUI对应控制台,GUI对应普通程序,驱动程序等没有子系统)32位的控制台程序当然可以调用PAI函数,而16位的DOS程序则不可以调用API函数。

再补充关于编译器的一点内容:通常大学里面学习C,c++时,最常用的是VC6.0

TC++3.0 和 TC2.0 VC6.0只能写32位程序。(也就是不能写Dos程序)

而TC++3.0 和 TC2.0这两个编译器是16位的编译器,不能写窗口程序(因为调用不了API(之所以调用不了,固然是编译器的限制,但实质是编译器根本不去使用32位寄存器))

那么,如何才能写一个即可以在DOS运行,又可以在windows下运行的程序(还要带窗口)?那就是要修改exe的PE文件结构,使用人工方法粘贴代码。

windows 应用程序与控制台应用程序的区别

从表面上来看:控制台程序运行时是在DOS环境下,或者模拟dos环境运行的程序,运行时一般会启动一个提示符窗口。 而应用程序是Windows环境下的窗口程序。运行时一般会启动一个窗口画面。(例外,病毒木马,就不显示窗口,这决定于是否创建了窗口,或者是否让窗口显示)

但是,实质上,windows应用程序和控制台应用程序的真正区别是,PE文件的结构不同,这点不需要我们去关心,编译器会根据你的选择去构建生成的exe文件的PE结构。

如何告之编译器你的选择?在编译器进行连接的时候,给它一个连接参数:

subsystem:windows或者subsystem:console来告诉它。对于大多数编程工具来说一般在“工程->设置->连接”这个表单里面就可以看到这个参数。

但是通常在我们要创建一个新的工程的时候,编译器会让我们事先选择好是创建windows应用程序还是创建控制台应用程序。这个参数的设置就不用我们操心了。

补充(你可以不看,有点复杂了):事实上,控制台程序依然还有区别,那就是,16位的可以在DOS操作系统环境中运行的DOS程序(也可以在window运行通常windows会模拟一个dos环境,这时你会程序窗口与平时的提示符窗口明显不一样),和 32位通常只能在windows操作系统中运行的程序。通常32位控制台在DOS下运行,它的PE结构中会给予DOS环境下运行的一个入口点(DOS文件头),这个入口点只有“一行”代码:"This program cannot be run in DOS mode" 而在32位系统下,操作系统将将查看PE文件头里面的subsystem字段来获得程序将以什么方式运行(windoes或者console)这个字段里面指示了子系统(CUI对应控制台,GUI对应普通程序,驱动程序等没有子系统)32位的控制台程序当然可以调用PAI函数,而16位的DOS程序则不可以调用API函数。

再补充关于编译器的一点内容:通常大学里面学习C,c++时,最常用的是VC6.0

TC++3.0 和 TC2.0 VC6.0只能写32位程序。(也就是不能写Dos程序)

而TC++3.0 和 TC2.0这两个编译器是16位的编译器,不能写窗口程序(因为调用不了API(之所以调用不了,固然是编译器的限制,但实质是编译器根本不去使用32位寄存器))

那么,如何才能写一个即可以在DOS运行,又可以在windows下运行的程序(还要带窗口)?那就是要修改exe的PE文件结构,使用人工方法粘贴代码。


相关文章

  • 求计算机账户与用户账户的区别与联系?
  • 在一个网络中用户和计算机都是网络的主体,两者缺一不可.拥有计算机账户是计算机接入Windows 2000和Windows NT网络的前提,拥有用户账户是用户登录到网络并使用网络资源的前提.因此,用户和计算机账户管理是Windows 2000 ...查看


  • 四种操作系统的区别
  • LINUX 特点 基本思想 Linux 的基本思想有两点:第一,一切都是文件:第二,每个软件都有确定的用途.其中第一条详细来讲就是系统中的所有内容都归结为一个文件,包括命令.硬件和软件设备.操作系统.进程等等.对于操作系统内核而言,都被视为 ...查看


  • [大学计算机基础]精选判断题200道
  • <大学计算机基础>判断题22道 1. 由于多媒体信息量巨大,因此,多媒体信息的压缩与解压缩技术是多媒体技术中最为关键的技术之一.正确 2. 声音编码属于感觉媒体.错误 3. 多媒体的实质是将不同形式的媒体信息(文本.图形.图像. ...查看


  • 流媒体整理
  • 第一章 1流媒体:指在Internet/Intranet网络中使用流式传输技术的连续时基媒体,如音频.视频或多媒体文件. 2流媒体技术(简):一种可以使音频.视频和其他多媒体文件能在Internet及Intranet上以实时的.无需下载等待 ...查看


  • 大一计算机基础试题
  • 以微处理器为核心的微型计算机属于第__四__代计算机. 用24×24点阵的汉字字模存储汉字,每个汉字需_72 __字节. 显示器的分辨率指的是水平分辨率和_垂直分辨率_的乘积 . 局域网的拓扑结构主要有总线型.__星型__.环型.树型.全互 ...查看


  • 域模式网络与工作组模式网络的区别.
  • 工作组 Work Group!^$] ](a\u0001f &Y 在一个网络内,可能有成百上千台电脑,如果这些电脑不进行分组,都列在"网上邻居"内,可想而知会有多么乱.为了解决这一问题,Windows 9x/NT ...查看


  • 恶意代码防范与检测
  • 原理篇 什么是恶意代码? 计算机病毒蠕虫(Worm )恶意代码的危害 计算机病毒 传染性.依附性 蠕虫 独立的程序 木马与病毒的区别: 自我复 制即 使是病毒编制者也可能无法对其 进行控制控制木马与远程控制软件的区别: 知道和允许不具有隐蔽 ...查看


  • 系统管理员面试题
  • 系统管理员面试题 1. 有答案问答 1) 你在一台Windows 2000 的域控制器上安装了终端服务,在用户的计算机上安装了终端服务客户端.当用户使用终端服务客户端用他自己的帐号试图连接到终端服务器的时候,他们看到系统提示"本地 ...查看


  • 2016浙大远程计算机应用基础(A)作业2(含答案)
  • 第2章 Windows操作系统及其应用(单选题) 1. Windows 操作系统的主要功能是__B____. A. 实现软.硬件转换 B.管理计算机系统所有的软.硬件 C. 把源程序转换为目标程序 D.进行数据处理 提示:操作系统属于系统软 ...查看


热门内容