IIn*_*ble 20
C++/WinRT 是Windows 运行时 (WinRT) API的语言投影。Windows 运行时1是 Windows 用于公开其 API 的基础结构。它旨在成为基于 C 的平面 Win32 API 的继承者(尽管您可以同时使用 Windows 运行时和 Windows API)。
C++/WinRT(与任何其他语言投影一样)将基于 COM 的 Windows 运行时接口转换为自然、惯用的语言模式,在 C++/WinRT 的情况下,C++'。最值得注意的是它做了三件事:
HRESULT返回值)和基于 C++ 异常的 C++ 错误报告之间进行转换。IAsyncInfo到 C++20 协程。使用(当时是新的)Windows 运行时作为交付渠道发布了多项新技术。最明显的是新的 UI 框架。据我所知,它仍然没有名字。它曾经被命名为“Metro”、“Modern UI”、“Fluent Design”。我听说过的最新术语是“ Windows 演示平台”。它使用 Direct2D 呈现,并且通常使用 XAML 进行创作。
虽然经常与 Windows 运行时混为一谈,但 Windows 演示平台只是该技术的一个客户端。它不是 Windows 运行时本身的一部分。
另一个重点是,Windows 运行时不强制要求使用任何特定的 UI 库或框架。它在经典桌面应用程序(直接用 Win32、MFC、WTL、wxWidgets 等编写)或 .NET 应用程序(Windows 窗体、WPF)中同样有效,就像在具有 XAML/Windows 演示平台 UI 的应用程序中一样.
1 使用现代化版本的 COM 公开 Windows 运行时。组件可以被多种语言使用和创作。组件使用符合ECMA-335 的元数据(.winmd 文件)对其公共接口进行编码。该技术本身不依赖于 .NET 或 CLR。
Chu*_*urn 19
IInspectable 的答案实际上是正确的,但更多的上下文也可能有所帮助......
C++/CX(又名 Visual C++/ZW开关)、Windows 运行时库 (WRL) 和 C++/WinRT 基本上都做同样的事情:提供一种机制,用于从 C++ 调用“Windows 运行时”样式的 API 和类型以及用于创作“Windows 运行时” " 样式 API 和类型。
OP 问题涉及一个更基本的问题:Windows 运行时 API 的重点是什么?
最初的 Win32 API 是为本地代码世界设计的,大多数程序是用 C 或 C++ 编写的。创建组件对象模型 (COM) 是为了使用相同的基本应用程序二进制接口 (ABI) 处理运行时版本控制(和许多其他功能)。C++ 是使用 COM 的一种更自然的方式,但您仍然可以通过各种宏在技术上使用 C,而不能。
.NET 和其他托管语言后来出现,并使用不同的调用机制。您可以使用本机互操作来访问 Win32 或 COM API,但它们通常不会以非常“C# 友好”的方式工作。已经创建了各种“包装程序集”,提供了一种更自然的方式来访问 C/C++ API 和类型。
随着互联网特别是万维网的发展,另一类应用程序是使用 HTML5+JavaScript 编写的。他们没有对 Win32 或 COM API 的任何特定访问权限,因此编写了特殊的模块和库来弥补功能差距。
因此,考虑到所有这三种主要方法,“Windows 运行时”风格是一种将 COM 的功能与 .NET 的反射丰富的元数据相结合的方法。这个想法是一个 API 可以被编写一次,并且可以被 C++、C# 和 HTML5+JavaScript 使用。
当然,除了能够调用 ABI 之外,使用 API 还存在很多问题,而且每种语言范式都大不相同,但从系统编程的角度来看,这就是重点。
有也使用其本身具有三个基本“appmodels” Windows运行时API的一个“万能Windows平台”:XAML,DirectX和XAML +的DirectX。如果这些应用程序是用 C++ 编写的,那么这些应用程序可以大量使用 C++/WinRT,但您也可以使用 Win32 桌面应用程序中的 Windows 运行时 API。
WRL 实际上是“ATL 2.0”,并且是 C++ 与 Windows 运行时 API 互操作的解决方案的首次尝试。您可以使用它来使用和创作 Windows 运行时类型,但这是大量的手动工作,并且没有很好地公开记录。Win32 桌面应用程序中的主要实用程序是
Microsoft::WRL::ComPtr智能指针。如果您想知道为什么 C++/CX 存在,请参阅此博客系列。它旨在成为 C++ 的易于使用的模型,但它经常与托管 C++(它使用相同的保留关键字,但与托管 C++ 或 .NET 完全无关)并不受其他编译器支持。
如果您想了解更多关于 C++/WinRT 的一般原因,请参阅这篇MSDN 杂志文章。这是一种更加 C++ 友好的方式来使用 Windows 运行时 API,可移植到其他非 Microsoft 编译器,并且越来越多地在内部和外部用于 Windows 运行时开发。它确实需要 C++17 语言功能,因此会努力提高 C++ 编译器的质量。
| 归档时间: |
|
| 查看次数: |
5992 次 |
| 最近记录: |