首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是C++/WinRT?

什么是C++/WinRT?
EN

Stack Overflow用户
提问于 2020-02-01 22:41:10
回答 1查看 9.5K关注 0票数 24

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-03 18:51:24

稽查表的答案是事实正确的,但更多的上下文也可能有帮助.

C++/CX (a.k.a.Visual C++ /ZW开关、Windows (WRL)和C++ //ZW基本上都是这样做的:为从C++调用"Windows“样式API和类型以及编写"Windows”样式API和类型提供了一种机制。

OP问题引出了一个更基本的问题: Windows的意义何在?

最初的Win32 API是为本地代码世界设计的,大多数程序都是用C或C++编写的。组件对象模型(,COM)是使用相同的基本应用程序二进制接口(ABI)来处理运行时版本控制(和许多其他特性)的方法。C++是使用COM的一种更自然的方式,但您仍然可以通过各种宏来从技术上使用C。

后来出现了.NET和其他托管语言,并使用了不同的调用机制。您可以使用本机互操作来访问Win32或COM,但它们通常不会以非常"C#友好“的方式工作。已经创建了各种“包装程序集”,提供了一种更自然的方式来从根本上访问C/C++ API和类型。

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

因此,考虑到这三种主要方法,"Windows“风格是一种将COM的特性与.NET的反射性丰富的元数据相结合的方法,其思想是一个API可以编写一次,并且可以被C++、C#和HTML5+JavaScript使用。

当然,除了能够调用ABI之外,使用API还有很多问题,而且每种语言范式都有很大的不同,但从系统编程的角度来看,这就是问题所在。

还有一个“通用Windows平台”,它使用Windows,它本身有三个基本的‘appmodel’:XAML、DirectX和XAML+DirectX。如果用C++编写,这些应用程序可以大量使用C++/WinRT,但也可以使用来自Win32桌面应用程序的Windows。

WRL实际上是“ATL2.0”,是第一次尝试使用解决C++互操作问题。您可以使用它来使用和编写Windows运行时类型,但是它是相当多的手工工作,并且没有公开地进行很好的记录。Win32桌面应用程序中的主要实用程序是Microsoft::WRL::ComPtr智能指针。 如果您想知道C++/CX存在的原因,请参阅本博客系列。它本来是一个易于使用的C++模型,但它经常与托管C++混为一谈(它使用相同的保留关键字,但与托管C++或.NET完全无关),其他编译器也不支持它。 如果您想更多地了解C++/WinRT的一般原因,请参阅此MSDN杂志文章。这是一种更加C++友好的使用Windows的方式,可移植到其他非Microsoft编译器,并且越来越多地用于Windows运行时的内部和外部开发。它确实需要C++17语言特性,因此大大提高了C++编译器的质量。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60021694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档