我如何用纯c++开发通用的windows 10应用程序,而不是c++ /CLI

How can I develop universal windows 10 apps with pure C++ and not C++/CLI?

本文关键字:c++ 应用程序 CLI windows 何用纯 开发      更新时间:2023-10-16

我想使用c++/DirectX/XAML开发通用的windows应用程序。但是似乎没有办法逃避微软的c++/CLI语言。我已经浏览了默认情况下创建pty项目时的代码,它都是c++/CLI。

c++/CLI (/CLR)又名Managed c++ 不支持对于通用的Windows apps平台,也不支持Windows 8 Store或Windows phone 8。

你看到的是c++/CX (/ZW)语言扩展,在MSDN和大多数c++示例中使用WinRT api。您所遇到的困惑是常见的,因为在实现c++/CX时重用了来自c++/CLI的相同语言关键字。没有。net运行时,没有垃圾收集,也没有像c++/CLI那样的解释代码。有关c++/CX历史的更多信息,请参阅Visual c++团队博客系列c++/CX第0部分:介绍。

不需要使用c++/CX编写或使用WinRT api,但是使用c++/CX语言扩展比使用纯c++更容易编写代码。你可以使用c++模板库Windows运行时库(WRL)而不是c++/CX,但你将不得不自己弄清楚如何使用它,因为使用它的示例很少,MSDN假定你将使用c++/CX。

标准样本在处理非winrt COM api(如Direct3D)时使用Microsoft::WRL::ComPtr智能指针,但通常这是标准样本使用的WRL的唯一部分。我利用WRL在DirectX工具包消费一些特定的WinRT api,如果你想看到一些有限的例子,使用它而不是c++/CX。

用WRL编写WinRT api还需要大量与MSIL文件手动同步的工作,以生成所需的元数据(但不是代码)。如果您是ATL方面的专家,那么您可以使用WRL来编写WinRT api,但除此之外,为了完全避免c++/CX而牺牲生产力可能是不值得的。

也就是说,您可以轻松地将c++/CX的使用隔离到应用程序中的特定模块。我在我的Direct3D UWP Visual Studio模板中这样做,这样大部分代码实际上是"纯"的c++。

看看Windows运行时的现代c++

项目描述页:

Modern c++ Library提供了一个标准c++语言投影Windows运行时。不需要使用非标准语言扩展或神秘的ABI接口和函数。有了Modern,你就有了力量库,无论您是否想要使用基于类的API或深入底层以获得更多控制的能力。

这看起来是一个非常完整的实现。


更新 (2016-10-07): Modern的作者已加入Microsoft,继续从事标准c++语言投影的工作。它已被重新命名为 c++/WinRT,并于最近在CppCon 2016上发表(参见在YouTube上拥抱Windows运行时的标准c++)。

库的预发布版本(只有头文件,没有编译器)应该很快就可以使用。在CppCon的谈话中,已经宣布"我们[Microsoft]希望能很快为您[我们]提供一些可用的东西"