C++ 如何使用纯C++;而不是C++/CLI?

C++ 如何使用纯C++;而不是C++/CLI?,c++,windows,directx,programming-languages,win-universal-app,C++,Windows,Directx,Programming Languages,Win Universal App,我想使用C++/DirectX/XAML开发通用windows应用程序。但似乎无法摆脱微软的C++/CLI语言。我已经浏览过了在你做pTY项目时默认的代码,它是所有的C++ + CLI。< P/C++ > P> C++ + CLI( /CLR < /COD> >)。对于通用Windows应用程序平台,托管C++是“强”不支持的/强的,并且对于Windows 8商店或Windows电话8也不支持。 您看到的是C++ + CX(/ZW)语言扩展,用于MSDN和大多数C++示例中,以消耗WRRT-AP

我想使用C++/DirectX/XAML开发通用windows应用程序。但似乎无法摆脱微软的C++/CLI语言。我已经浏览过了在你做pTY项目时默认的代码,它是所有的C++ + CLI。< P/C++ > P> C++ + CLI(<代码> /CLR < /COD> >)。对于通用Windows应用程序平台,托管C++是“强”不支持的/强的,并且对于Windows 8商店或Windows电话8也不支持。

您看到的是C++ + CX(/ZW)语言扩展,用于MSDN和大多数C++示例中,以消耗WRRT-API。由于在实现C++/CX时重用了来自C++/CLI的相同语言关键字,所以您经常会遇到这种混淆。没有.NET运行时,没有垃圾收集,也没有C++/CLI中的解释代码。参见VisualC++ C++博客系列,更多关于C++/CX.

的历史。 <>你不必使用C++/CX来编写或使用WiRT API,但是它们比C++ C++更容易用C++或CX语言扩展来编码。你可以使用C++模板库而不是C++ +CX,但是你将不得不自己去理解,因为使用它的样本很少,MSDN假定你将使用C++ +CX.< 标准示例在处理Direct3D等非WinRT COM API时使用了
Microsoft::WRL::ComPtr
智能指针,但通常这是标准示例使用的WRL的唯一部分。如果您希望看到一些使用WRL而不是C++/CX的有限示例,我将在中使用WRL来使用一些特定的WinRT API

使用WRL编写WinRT API还需要大量手动同步MSIL文件以生成所需的元数据(但不是代码)。如果您是ATL方面的专家,您将能够使用WRL来编写WinRT API,但否则,完全避免使用C++/CX可能不值得降低生产率

也就是说,您可以轻松地将C++/CX的使用隔离到应用程序中的特定模块。我这样做是为了让大多数代码实际上是“纯”C++。 从项目描述页面:

现代C++库提供了一个标准的C++语言投影 Windows运行时。不需要使用非标准语言扩展 或者隐晦的ABI接口和函数。有了摩登,你就有了力量 用于Windows运行时的库,无论您是否希望 基于类的API,或者能够隐藏以获得更多控制

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


<强>更新< /强>(2016-10-07):现代作者加入微软继续工作C++标准语言投影。它被重新命名为C++/WinRT,最近在2016年CppCon上发布(见)


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

Hmm,不,您不必担心C++/CLI,。它在通用应用程序中不可用。如果你想在纯C++中完成它,那么你必须使用WRL库进行一次尝试。你最好了解COM,才有成功的希望。这不是一般的技能。否则,C++/CX语言扩展是一个无需思考的,所有的示例代码(使用示例)使用它,并且在隐藏COM胶方面非常有效。如果使用下载的Visual Studio 2015,它默认不会安装C++。你必须选择定制安装和选择C++。作为WRL的替代,C++ + WRET(参见)正在进行中。它是Windows运行时的标准C++语言投影。它可以以一种对C++开发人员感觉自然的方式来消耗WRET类型。我不知道它在发布类型方面能提供多少功能,即在生成.winmd元数据时需要多少手动工作。