【问题标题】:what is the difference between win32 application, windows form application and console application?win32 应用程序、windows 窗体应用程序和控制台应用程序有什么区别?
【发布时间】:2014-01-02 18:33:21
【问题描述】:

我想知道 windows 窗体应用程序、win32application 和控制台之间有什么区别,我知道 windows 窗体应用程序和 win32 应用程序都是 gui 工具,但我想知道什么时候使用一个而不是另一个,以及我可以将控制台应用程序转换为 Windows 窗体应用程序吗?

【问题讨论】:

  • 简而言之:高级(表单)、低级(WIN32)和最低级(控制台)。另请注意,您可以使用所有三种类型的表单/WIN32/控制台功能(甚至图形)。

标签: c++ windows console-application win32gui


【解决方案1】:

Windows 窗体 指的是 .NET 应用程序。它不是直接基于本机 Windows API,而是基于 .NET 基础架构。其中包括一个虚拟机。

Win32 一般指 32 位 Windows API。但是,_WIN32 宏是为 32 位和 64 位编程定义的。作为 Visual Studio 项目类型,它包括 GUI 和控制台子系统 API 级程序。

Windows 子系统 是可执行文件头中的一个小整数值,它告诉 Windows 这个程序需要什么样的服务。这个值可以通过例如检查。微软的dumpbin 程序,例如dumpbin c:\windows\notepad.exe /headers | find "ubs"。在 Windows 9x 中,dumpbin 输出可通过文件预览功能获得,但该功能已停用。

Windows 中的每个进程都可以与一个且最多一个控制台窗口相关联。

GUI 子系统 意味着Windows不会尝试为每个实例配备相关的控制台窗口。但是,该过程可以自己创建控制台窗口。通常此子系统用于具有图形用户界面(因此称为“GUI”)的普通程序,并且对于大多数链接器,它被指定为“windows”。

控制台子系统意味着 Windows 将尝试为每个实例配备相关的控制台窗口,并在必要时创建一个新窗口。

注意

  • 可以将相同的源代码构建为控制台或 GUI 子系统。这非常容易做到。只需更改子系统规范即可。

  • GUI 子系统可执行文件具有标准流,就像控制台子系统可执行文件一样。

  • 控制台子系统可执行文件可以呈现图形用户界面,就像 GUI 一样。

还要注意

  • 默认情况下,Microsoft 的工具不接受用于 GUI 子系统构建的标准 C++ main。但是,这种不合格行为很容易修复。只需在链接器选项中指定 /entry:mainCRTStartup

GNU工具,即g++就没有这个问题。

【讨论】:

  • 只是好奇。如果我在 GUI 子系统中编译一段代码,这种情况下的标准输出是什么?例如,如果我在代码中有一行printf("hello world\n");,那么“hello world”是什么时候打印的?
  • @ZhengLiu:默认情况下,GUI子系统进程的标准流是断开的,null,因为默认情况下没有关联的控制台窗口。但是,您可以例如重定向命令中的输出流以运行程序。目前,a >con 不起作用,但 a | more 起作用。该程序也可以只创建一个控制台窗口。为了使 C 或 C++ 输出(与 API 级别输出相反)正常工作,至少需要重新打开 C 级别流。
【解决方案2】:
  1. Windows 窗体应用程序 是使用图形编程接口框架(例如 .NET、DELPHI 或 MFC)而不是直接调用 win32 API 的应用程序。
  2. 另一方面,win32应用程序通常直接处理windows api来自底向上创建应用程序。
  3. 并且控制台应用程序没有任何图形界面。只有命令行窗口用于数据输入和结果输出。

【讨论】:

  • MFC 仅适用于 Win32 应用程序。我相信德尔福也是如此。 Windows 窗体仅适用于 .Net 应用程序。
【解决方案3】:

“Windows 窗体应用程序”是一个 GUI .NET 应用程序。

“win32 应用程序”是本机 Windows GUI 应用程序。

“控制台应用程序”是没有 GUI 的本机应用程序。

我不太明白您将一种应用程序“转换”为另一种应用程序的确切含义。但。如果您正在谈论使用某些 IDE 并将项目转换为另一个项目:是的,这是可能的。主要区别在于链接应用程序的 .DLL。例如,您可以将打开为“控制台”的项目配置为“win32”。这并不容易,但仍有可能。否,如果您想知道您安装的给定现有应用程序是否可以转换:否。

【讨论】:

  • 控制台应用程序通常附加到控制台窗口。但是,他们可以完全访问 Win32 API,并且可以创建额外的 GUI 窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多