我想使用C ++ / DirectX / XAML开发通用Windows应用程序。但似乎没有办法逃避微软的C ++ / CLI语言。当你创建一个pty项目时,我已经浏览了默认的代码,而且它都是C ++ / CLI。
我想使用C ++ / DirectX / XAML开发通用Windows应用程序。但似乎没有办法逃避微软的C ++ / CLI语言。当你创建一个pty项目时,我已经浏览了默认的代码,而且它都是C ++ / CLI。
C ++ / CLI(/CLR
)a.k.a. 托管C ++ 是 不支持 对于通用Windows应用程序平台,Windows 8商店或Windows Phone 8也不支持。
你看到的是C ++ / CX(/ZW
)在MSDN和大多数C ++示例中使用的语言扩展,以使用WinRT API。您遇到的困惑很常见,因为在实现C ++ / CX时,C ++ / CLI中使用了相同的语言关键字。没有.NET运行时,没有垃圾收集,也没有C ++ / CLI中的解释代码。请参阅Visual C ++团队博客系列 [n]的C ++ / CX第0部分:简介 有关C ++ / CX历史的更多信息。
您 没有 使用C ++ / CX来创作或使用WinRT API,但使用C ++ / CX语言扩展比使用纯C ++更容易编码。您可以使用C ++模板库 Windows运行时库(WRL) 而不是C ++ / CX,但你必须自己弄清楚如何使用它,而MSDN假设你将使用C ++ / CX。
标准样品使用
Microsoft::WRL::ComPtr
处理非WinRT COM API(如Direct3D)时的智能指针,但通常这是标准样本使用的WRL的唯一部分。我在中使用WRL DirectX工具包 如果要查看使用它而不是C ++ / CX的一些有限示例,请使用某些特定的WinRT API。
使用WRL创作WinRT API还需要与MSIL文件进行大量手动同步才能生成所需的元数据(但不能生成代码)。如果您是ATL的专家,您将有能力使用WRL来创建WinRT API,但是否则完全避免使用C ++ / CX可能不值得提高生产力。
也就是说,您可以轻松地将C ++ / CX使用情况隔离到应用程序中的特定模块。我这样做了 Direct3D UWP Visual Studio模板 所以大多数代码实际上都是“纯粹的”C ++。
从项目描述页面:
Modern C ++ Library提供标准C ++语言投影 Windows运行时。无需使用非标准语言扩展 或者神秘的ABI接口和功能。随着现代,你获得了力量 用于Windows运行时的库,无论您是否想要方便 基于类的API或能够进行更多控制的能力。
它看起来像一个非常完整的实现。
该库的预发布版本(只是没有编译器的头文件)应该很快就可以使用。在CppCon谈话中已经宣布 “我们[微软]希望尽快给你[我们]提供一些东西”。