1.控制台:

存放管理工具的框架,例如 Microsoft 管理控制台 (MMC)。控制台是由控制台树中的项定义的,可能包括文件夹和其他容器、万维网页和其他管理项。控制台带有窗口,这些窗口能提供控制台树视图和由控制台树中的项引发的管理属性、服务及事件的视图。

2.DOS:

DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”。DOS是个人计算机上的一类操作系统

3.命令提示符:

命令提示符(CMD)是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000和XP中, Vista中,和Server 2003 )下的“MS-DOS 方式”。

命令提示符(cmd)和dos:

解释:在windows操作系统里进的DOS(即输入 CMD 进命令提示符)不是纯DOS,只是为方便某些需求而建立的,而纯DOS本身就是一种操作系统.(两者的区别:比如你可以在纯DOS下删除你的 windows系统,但在所说的"命令提示符"里却不能,因为不可能"在房子里面拆房子吧?")


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

从表面上来看:控制台程序运行时是在DOS环境下,或者模拟dos环境运行的程序,运行时一般会启动一个提示符窗口。 

 

而应用程序是Windows环境下的窗口程序。运行时一般会启动一个窗口画面。(例外,病毒***,就不显示窗口,这决定于是否创建了窗口,或者是否让窗口显示)

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

 

如何告之编译器你的选择?在编译器进行连接的时候,给它一个连接参数: 
subsystem:windows或者subsystem:console来告诉它。对于大多数编程工具来说一般在“工程->设置->连接”这个表单里面就可以看到这个参数。 


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

 

5.TC编译的dos程序和VC编译的win32控制台程序的区别

①一个是16位的DOS程序,一个是标准的32位的Windows应用程序。前者依然受着64KB内存分段约束,后者无忧无虑地使用着4GB内存地址空间。它们本来就是运行在不同的操作系统上的。DOS程序可以运行在windows上是因为有NTVDM。而你把VC生成的控制台程序放到DOS下只会得到!?This program cannot be run in DOS mode。

②如果你是用标准库编写的话,代码应该没多大差异的。但执行时调用库方式却差天共地。前者通过API模拟出一个执行环境,后者是直接调用WIN32 API的。

③TC里面编写程序确实是可以调用中断,可是这个中断不是直接执行的。是NTVDM提供的。

④VC6不能编写DOS程序,只能编写控制台程序。注意,这只不过是Win32程序只使用控制台这个标准输入输出而已。

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

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

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