我想使用C ++ / DirectX / XAML开发通用Windows应用程序。但似乎没有办法逃避微软的C ++ / CLI语言。当你创建一个pty项目时,我已经浏览了默认的代码,而且它都是C ++ / CLI。
答案 0 :(得分:12)
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; 。