C++ 什么是C++/温特到底是谁?

C++ 什么是C++/温特到底是谁?,c++,windows,c++-winrt,C++,Windows,C++ Winrt,我一直在网上搜索。我得到: C++/WinRT作为标准的C++17头文件库提供 但它到底是什么?它是旧的Win32 API的新的面向对象的替代品吗?它是Windows上Qt框架的替代品吗?它是一个网络库(大多数例子似乎都是关于网络的)。它是GUI框架吗?这是编写新Windows应用程序的首选方式吗?它是臭名昭著的MFC库的替代品吗?C++/WinRT是一个很好的例子。Windows Runtime1是Windows用来公开其API的基础结构。它旨在成为基于C的平面Win32 API的继承者(尽管

我一直在网上搜索。我得到:

C++/WinRT作为标准的C++17头文件库提供

但它到底是什么?它是旧的Win32 API的新的面向对象的替代品吗?它是Windows上Qt框架的替代品吗?它是一个网络库(大多数例子似乎都是关于网络的)。它是GUI框架吗?这是编写新Windows应用程序的首选方式吗?它是臭名昭著的MFC库的替代品吗?

C++/WinRT是一个很好的例子。Windows Runtime1是Windows用来公开其API的基础结构。它旨在成为基于C的平面Win32 API的继承者(尽管您可以同时使用Windows运行时和Windows API)

C++/WinRT(与任何其他语言投影一样)将基于COM的Windows运行时界面转换为自然、惯用的语言模式,对于C++/WinRT,则是C++。最值得注意的是,它有三个功能:

  • 它通过将引用计数绑定到智能指针的对象生命周期来自动化COM对象的资源管理
  • <> LI>在COM的错误报告(基于<代码> HESRESUT//COD>返回值)和基于C++异常的C++错误报告之间进行转换。
  • 它基于
    IAsyncInfo
    将Windows运行时的异步模式映射到C++20协同程序

使用(当时是新的)Windows运行时作为交付渠道发布了几种新技术。最明显的是新的UI框架。据我所知,它还没有名字。它过去被称为“Metro”、“Modern UI”、“Fluent Design”。我听到的最新一个术语叫“”。它使用Direct2D渲染,通常使用XAML编写

虽然经常与Windows运行时混淆,但Windows演示平台只是该技术的一个客户端。它不是Windows运行时本身的一部分

另一个要点是,Windows运行时不强制使用任何特定的UI库或框架。它在经典的桌面应用程序(直接用Win32、MFC、WTL、wxWidgets等编写)或.NET应用程序(Windows窗体、WPF)中的效果与在具有XAML/Windows演示平台UI的应用程序中的效果相同



1使用现代化版本的COM公开Windows运行时。组件可以由多种语言使用和编写。组件使用一致性元数据(.winmd文件)对其公共接口进行编码。这项技术本身并不依赖.NET或CLR。

IInspectable的答案事实上是正确的,但多了解一些上下文也可能会有所帮助

C++ +CX(A.K.VisualC++ >代码/ZW <>原Win32 API是为本地代码世界设计的,大多数程序是用C或C++编写的。创建组件对象模型(COM)是为了使用相同的基本应用程序二进制接口(ABI)处理运行时版本控制(以及许多其他功能)。C++是使用COM的一种更自然的方式,但是您仍然可以通过各种宏和不使用C来使用C。 NET和其他托管语言后来出现,并使用不同的调用机制。您可以使用本机互操作来访问Win32或COM API,但它们通常不会以非常“友好”的方式工作。已经创建了各种“包装程序集”,提供了一种更自然的方式来访问基本的C/C++API和类型

随着互联网的发展,特别是全球网络的发展,另一类应用程序使用HTML5+JavaScript编写。他们没有对Win32或COM API的任何特定访问权限,因此编写了特殊的模块和库来弥补功能缺陷

因此,考虑到所有这三种主要方法,“Windows运行时”风格是一种将COM的特性与.NET反射丰富的元数据相结合的方法。其思想是API可以一次性编写,C++、C语言和HTML5+JavaScript都可以使用。 当然,除了能够调用ABI之外,使用API还有很多问题,这些语言范例中的每一种都非常不同,但从系统编程的角度来看,这就是问题的关键所在

还有一个使用Windows运行时API的“通用Windows平台”,它本身有三个基本的“appmodels”:XAML、DirectX和XAML+DirectX。这些应用程序可以在C++中使用C++,也可以使用WinRT,但也可以使用Win32桌面应用程序的Windows运行时API。 <> WRL是“ATL 2”,是第一个尝试用Windows运行时API解决C++互操作的解决方案。您可以使用它来使用和编写Windows运行时类型,但这是相当多的手动工作,并且没有公开的文档记录。Win32桌面应用程序中的主要实用程序是
Microsoft::WRL::ComPtr
智能指针

如果您想知道C++/CX存在的原因,请参阅。它的目的是成为一个易于使用的C++模型,但它经常与托管C++相混淆(它使用相同的保留关键字,但根本不与托管C++或.NET相关),而不受其他编译器支持。 如果您想了解更多关于C++/WinRT的一般原因,请参阅以下内容。这是一种更为C++友好的方式来使用Windows运行时API,可移植到其他非Microsoft编译器,并且越来越多地在Windows运行时开发的内部和外部使用。它确实需要C++ 17语言的特性,因此对C++编译器的质量有很大的影响。
它是Win32 API的完全替代品吗?我没有看到任何人谈论C++/WinRT,除了