windows应用程序与控制台应用程序的区别
来源:互联网 发布:闲鱼纠纷淘宝偏向谁 编辑:程序博客网 时间:2024/06/02 16:52
从表面上来看控制台程序运行时是在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位的控制台程序当然可以调用API函数,而16位的DOS程序则不可以调用API函数。
再补充关于编译器的一点内容通常大学里面学习Cc++时最常用的是VC6.0TC++3.0 和 TC2.0 VC6.0只能写32位程序。也就是不能写Dos程序。而TC++3.0 和 TC2.0这两个编译器是16位的编译器不能写窗口程序,因为调用不了API之所以调用不了固然是编译器的限制,但实质是编译器根本不去使用32位寄存器。
那么,如何才能写一个即可以在DOS运行又可以在windows下运行的程序(还要带窗口)那就是要修改exe的PE文件结构使用人工方法粘贴代码。
但是,实质上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位的控制台程序当然可以调用API函数,而16位的DOS程序则不可以调用API函数。
再补充关于编译器的一点内容通常大学里面学习Cc++时最常用的是VC6.0TC++3.0 和 TC2.0 VC6.0只能写32位程序。也就是不能写Dos程序。而TC++3.0 和 TC2.0这两个编译器是16位的编译器不能写窗口程序,因为调用不了API之所以调用不了固然是编译器的限制,但实质是编译器根本不去使用32位寄存器。
那么,如何才能写一个即可以在DOS运行又可以在windows下运行的程序(还要带窗口)那就是要修改exe的PE文件结构使用人工方法粘贴代码。
阅读全文
0 0
- windows应用程序与控制台应用程序的区别
- windows系统PE文件的结构简述以及w应用程序与控制台程序的区别
- win32控制台应用程序与win32项目的区别
- win32控制台应用程序与win32项目的区别
- Win32控制台应用程序、Win32项目、MFC应用程序的区别与联系
- win32应用程序肯win32控制台应用程序的区别
- Web应用程序与桌面应用程序的区别
- Web应用程序与桌面应用程序的区别
- 控制台应用程序的Opencv
- VC++ 2010下的MFC应用程序与Windows窗体应用程序的区别
- 使用vs编译程序选择新建”空项目“与”win32控制台应用程序“的区别。
- Win32项目与win32控制台(console)应用程序、空项目区别即相互之间的转换
- 进程与应用程序的区别
- C#控制台与窗体应用程序
- 让Windows Mobile 6.1的手机可以运行控制台应用程序
- 让Windows Mobile 6.1的手机可以运行控制台应用程序
- 让Windows Mobile 6.1的手机可以运行控制台应用程序
- Windows:改变C++控制台应用程序字体的颜色
- 使用 树莓派 搭建属于自己的 web服务器(二)设置Apache
- hdu 6083 度度熊的午饭时光(01背包+打印路径)
- 通过poi实现解析并读取excel文件(包含xls、xlsx后缀)
- java数据结构与算法-优先级队列
- JAVA开发的23种设计模式之 --- 工厂模式 && 抽象工厂模式
- windows应用程序与控制台应用程序的区别
- 新的开始
- LabVIEW 学习_02
- nginx部署多个node站点
- ubuntu17.04安装ROS lunar
- Unity EasyTouch组件
- 最简单的pdf转cad格式的操作
- input标签的radio单选,为什么成多选了
- Codeforecs 675E Trains and Statistic 贪心+DP