如何使用纯C++而不是C++/CLI开发通用Windows 10应用程序?

Gar*_*y S 13 c++ windows directx programming-languages win-universal-app

我想使用C++/DirectX/XAML开发通用Windows应用程序.但似乎没有办法逃避微软的C++/CLI语言.当你创建一个pty项目时,我已经浏览了默认的代码,而且它都是C++/CLI.

Chu*_*urn 12

C++/CLI( /CLR)又名托管C++不支持的通用Windows应用程序平台,并且不支持Windows 8商店或Windows Phone 8任.

您所看到的是C++/CX(/ZW)语言扩展,它们在MSDN和大多数C++示例中用于使用WinRT API.您遇到的困惑很常见,因为在实现C++/CX时,C++/CLI中使用了相同的语言关键字.没有.NET运行时,没有垃圾收集,也没有C++/CLI中的解释代码.有关C++/CX历史的更多信息,请参见[n]的Visual C++ Team博客系列C++/CX第0部分:简介.

不必使用C++/CX来创作或使用WinRT API,但使用C++/CX语言扩展比使用纯C++更容易编码.您可以使用C++模板库Windows运行时库(WRL)而不是C++/CX,但是您必须自己弄清楚如何使用它并且MSDN假设您将使用它C++/CX.

标准样本Microsoft::WRL::ComPtr在处理非WinRT COM API(如Direct3D)时使用智能指针,但通常这是标准样本使用的WRL的唯一部分.如果您想查看使用它而不是C++/CX的一些有限示例,我会使用DirectX Tool Kit中的WRL 来使用某些特定的WinRT API.

使用WRL创作WinRT API还需要对MSIL文件进行大量手动同步才能生成所需的元数据(但不是代码).如果您是ATL的专家,您将有能力使用WRL来创建WinRT API,但是否则完全避免使用C++/CX可能不值得提高生产力.

也就是说,您可以轻松地将C++/CX使用情况隔离到应用程序中的特定模块.我在Direct3D UWP Visual Studio模板中执行此操作,因此大多数代码实际上都是"纯粹的"C++.


小智 7

看一下Windows Runtime的Modern C++

从项目描述页面:

Modern C++ Library为Windows运行时提供标准C++语言投影.无需使用非标准语言扩展或神秘的ABI接口和功能.使用Modern,您可以获得Windows运行时的电源库,无论您是希望获得基于类的API的便利性还是能够进行更多控制.

它看起来像一个非常完整的实现.


更新(2016-10-07):Modern的作者已加入Microsoft继续开发标准C++语言投影.它已重新命名为C++/WinRT,最近在CppCon 2016上展示(请参阅为Windows运行时使用标准C++(在YouTube上)).

该库的预发布版本(只是没有编译器的头文件)应该很快就可以使用.在CppCon的演讲中,已宣布"我们[微软]希望尽快为您提供一些东西".

  • 即使只有链接答案,这也是一个很好的答案. (2认同)