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

时间:2015-09-06 14:33:31

标签: c++ windows directx programming-languages win-universal-app

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

2 个答案:

答案 0 :(得分:12)

对于通用Windows应用程序平台,

C ++ / CLI(/CLR)又名托管C ++ 不支持,并且不支持Windows 8 Store或Windows电话8也是。

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

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

  

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

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

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

答案 1 :(得分:7)

查看Modern C++ for the Windows Runtime

从项目描述页面:

  

Modern C ++ Library提供标准C ++语言投影   Windows运行时。无需使用非标准语言扩展   或者神秘的ABI接口和功能。随着现代,你获得了力量   用于Windows运行时的库,无论您是否想要方便   基于类的API或能够进行更多控制的能力。

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

<小时/> 更新(2016-10-07): Modern 的作者已加入Microsoft,继续开展标准C ++语言投影。它已被重新命名为 C ++ / WinRT ,最近在CppCon 2016上展示(见Embracing Standard C++ for the Windows Runtime (on YouTube))。

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