本周早些时候,Kenny Kerr presented C++/WinRT at CppCon 20161。这是Windows运行时的标准C++投影,基于Modern。
据我了解,C++/CX编译器/预处理器/代码生成器不涉及标准C++代码,而C++/WinRT是标准C++库,我天真的解释是,可以同时使用C++/CX和C++/WinRT在同一个项目中。
问题:
万一重要,这些问题的答案使我可以立即决定如何将C++/CX项目推向 future 。
1 Embracing Standard C++ for the Windows Runtime (on YouTube)。
最佳答案
关于“C++/WinRT是否可以使用在同一项目中使用C++/CX实现的类型”的问题?
答案是是和否。在同一项目中定义了“引用类”,因为这样的项目必须在启用C++/CX的情况下进行编译,因此您的代码可以像使用任何引用类一样简单地使用该类。
但是,如果您想将“ref类”用作C++/WinRT投影,则答案实际上是“否”。
为了获得C++/WinRT投影的类定义,您需要在“引用类”的元数据上运行cppwinrt.exe编译器。那将需要以某种方式获取元数据。您可以建立某种机制来编译“ref class”一次,获取winmd,通过mdmerge对其进行处理,使其以规范的形式,在元数据上运行cppwinrt.exe以获取预计的类定义,然后包括生成的 header 。
或者,您可以编写IDL来描述“ref类”,使用MIDLRT将其编译为元数据,然后运行cppwinrt.exe。实际的IMO都不是。
最合理的选择是像在C++/CX类型中一样直接使用ref类,因为定义在同一解决方案中。下一个最实用的解决方案是将类放在一个单独的项目中,对其进行编译以获取winmd,然后从winmd创建 header 。这种方法还允许使用“ref类”(通过投影)的单独项目在不使用C++/CX代码的情况下进行构建。
为了完全透明,请注意我们的初始发行版(现在可以在https://github.com/Microsoft/cppwinrt上获得)不包括cppwinrt.exe编译器本身。相反,它包含C++/WinRT头文件,其中包含Windows 10周年更新SDK中定义的所有Windows运行时类型/API的投影-这包括通用平台API和所有扩展SDK API。
关于c++ - 可以在同一项目中使用C++/CX和C++/WinRT吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39686332/