我想知道Windows窗体应用程序、Win32应用程序和控制台之间的区别,我知道Windows窗体应用程序和Win32应用程序都是GUI工具,但我想知道何时使用其中一个而不是另一个,并且我是否可以将控制台应用程序转换为Windows窗体应用程序?
我想知道Windows窗体应用程序、Win32应用程序和控制台之间的区别,我知道Windows窗体应用程序和Win32应用程序都是GUI工具,但我想知道何时使用其中一个而不是另一个,并且我是否可以将控制台应用程序转换为Windows窗体应用程序?
Windows Form是指一个.NET应用程序。它不是直接基于本地的Windows API,而是基于.NET基础设施构建的,其中包括一个虚拟机。
Win32通常指32位Windows API。然而,_WIN32
宏对于32位和64位编程都有定义。作为Visual Studio项目类型,它包括GUI和控制台子系统的API级别程序。
Windows子系统是可执行文件头部的一个小整数值,告诉Windows这个程序需要哪些服务。可以通过例如Microsoft的dumpbin
程序来检查这个值,例如dumpbin c:\windows\notepad.exe /headers | find "ubs"
。在Windows 9x中,dumpbin
输出可以通过文件预览功能获得,但该功能已被停止。
Windows中的每个进程都可以与一个控制台窗口相关联,但至多只能关联一个。
GUI子系统意味着Windows将不会试图为每个实例配备关联的控制台窗口。但是,该进程可以自己创建控制台窗口。通常,此子系统用于带有图形用户界面(因此,“GUI”)的普通程序,大多数链接器将其指定为“windows”。
控制台子系统意味着Windows将尝试为每个实例配备关联的控制台窗口,必要时会创建一个新的窗口。
请注意:
相同的源代码可以构建为控制台或GUI子系统。这非常容易做到,只需更改子系统规范即可。
GUI子系统可执行文件具有标准流,就像控制台子系统可执行文件一样。
控制台子系统可执行文件可以呈现图形用户界面,就像GUI子系统一样。
main
用于GUI子系统构建。然而,这种不符合规范的行为很容易修复。只需在链接器选项中指定 /entry:mainCRTStartup
。使用GNU工具(g++)则不存在此问题。
printf("hello world\n");
,那么“hello world”是在什么时候被打印出来的? - Zheng Liu