【问题标题】:Why is it said that WinRT replaces the Windows API为什么说WinRT取代了Windows API
【发布时间】:2015-09-25 05:56:09
【问题描述】:

在几乎所有关于新 WinRT API 的文本中,我都会提到“WinRT 是适用于 Windows 的新 API,并取代了旧的 Win32 API”。由于 WinRT 的目标是开发 Windows 应用商店应用程序,因此在我看来,这种说法并不成立。

我无法想象使用 WinRT 可以完成许多应用程序(例如 Microsoft Office、Adobe Products、3D Designer Programs 甚至 Visual Studio)。这些应用程序仍然需要 Windows API(又名 Win32)的功能。

那么为什么经常说 WinRT API 取代了 Windows API?

【问题讨论】:

  • Microsoft 的目标是打造一个“通用”应用平台,该平台可在所有设备(如手机、台式机、笔记本电脑和笔记本电脑)上统一工作。传统的 Win32 API 在其整个历史中一直是 Windows 开发不可或缺的一部分,几乎不可能完全取代它。无论是好是坏,对还是错,我们的愿望是定位 WinRT,以将开发人员指向所谓的 Windows 通用应用程序的方向。
  • 微软在引入 .NET 时尝试了同样的事情,看看结果如何(不)。
  • 它只是“下一个流行的东西”,等待足够长的时间,它会再次消失。
  • 嗨,Sam,去年这个问题的情况发生了变化。请检查我的新答案,以防它影响您或您的团队。

标签: windows api winapi windows-runtime desktop-bridge


【解决方案1】:

最近由于几个原因,这种情况发生了变化,但以下是您希望在当前 Windows 应用程序开发(大约 2017 年)中使用 WinRT 而不是 Win32 的原因:

  1. UWP 应用利用 WinRT
  2. 可以使用桌面桥将 Win32 应用转换为 UWP 应用
  3. Windows 10 S requires all apps to go through the Windows Store

Ergo,使用 WinRT 将花费更少的时间为新的 Windows 10 S Store-only 应用程序范例转换项目和代码。

关于 WinRT 与 Win32API 与 .NET,.NET 和 WinRT 都部分使用 Win32 构建; IIRC,他们使用它的子集。至少这是 2012 年 ArsTechnica 在 Peter Bright 的文章 "Turning to the past to power Windows’ future: An in-depth look at WinRT" 中传达的内容。这就是这个堆栈图的来源,或者至少它在那里被使用过:

【讨论】:

  • “通过商店所需的所有应用程序”。太阳还没有升起的一天,我会发现一些积极的东西。回到第一个带有 Windows CE 的 PDA 的时代,您可以在没有任何外部参与的情况下对自己的设备进行编程。这是一个特点。我有电脑要计算——我的方式。而且我不需要一些公司来循环进入我的开发周期。我的设备 - 我的代码。没有其他人需要参与其中。
  • 我什至不会试图为他们的设计辩护:)
  • 这有点为之辩护:“为什么要使用 WinRT 而不是 Win32”
【解决方案2】:

我不确定是否经常说 Windows 运行时 (WinRT) API 取代了 Win32 API。这不是微软所说的。在许多方面,WinRT 试图从 .NET Framework 的失败中吸取教训,以取代 Win32 API。这包括微软没有试图将 WinRT 作为替代品,而只是一种新的做事方式。

实际上,您提到的应用程序无法使用 WinRT API 实现的原因并不多。新 API 包含许多旧 API 的功能。您可以使用 C++ 编写 WinRT 应用程序,生成的应用程序是本机可执行文件,而不是托管的。甚至可以使用 Win32 API 的子集。

虽然 Adob​​e 将其应用程序移植到 WinRT 并没有什么好处,但预计 Microsoft 会这样做。他们重写了大部分 Visual Studio 以使用 .NET 框架。如果有的话,WinRT API 使得在新环境中实现更多功能变得切实可行。

【讨论】:

  • 感谢您的回复。实际上,.NET Framework 似乎是基于 Win32(或至少是其中的一部分)构建的,如果您查看 Frameworks 实现内部就可以看到。我提到的应用程序使用了很多子窗口。 Visual Studio 需要做很多 WinRT 不允许的事情。如果其他应用程序禁止访问应用程序(沙盒),您将如何调试应用程序?
  • 当然,.NET 使用 Win32,但这并不意味着它不打算取代 Win32。 Win32 本身是建立在本机 NT API 之上的。就像没有人使用本机 NT API 一样,微软希望 .NET 将取代 Win32,并且没有人会再使用 Win32 API。我不确定“子窗口”是什么意思,但 WinRT(现在)支持多个窗口。不是所有的 Visual Studio 都可以使用 WinRT API 来实现,至少现在是这样,但大部分都可以。 API 的当前状态未固定。
  • WinRT 本身也使用类似于 .NET 的 Win32 API。从这个意义上说,它也不是替代 API。
  • 什么时候声称 .NET Framework 应该取代 Win32 API?这完全是零意义,因为整个 .NET Framework 都是在 Win32 上实现的。
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多