你能用C++/CX编写普通的Windows应用程序吗?

6

你是否只能使用“Metro-style”应用程序和Windows Store应用程序?

起初,我认为C++/CX会是C++/CLI的一个很好的替代品,因为它有一些漂亮的C#风格的关键字('sealed','partial'),并且它也编译成本地代码,而不是使用.NET。但在网上阅读时,我发现所有的信息都涉及到Windows Store应用程序和Metro-styled应用程序...

另外,WinRT只适用于Windows 8及以上版本吗?

2个回答

12

是的,您可以使用C++/Cx编写桌面应用程序,并可以在桌面应用程序中使用一些Windows Runtime API(在文档和头文件中标记为可用于桌面应用程序)。请参见桌面应用程序的Windows Runtime API。MSDN上的枚举应用程序包示例演示了在桌面应用程序中使用C++/Cx调用Windows Runtime API。

Windows Runtime Xaml类不适用于桌面应用程序,但由于您可以混合使用C++和C++/Cx,因此可以从应用程序中调用典型的桌面UI API(Win32、MFC、DirectX等),该应用程序还使用C++/Cx。

C++/Cx不是C++/CLI的替代品。除了使用一些类似的语法之外,它们有非常不同的目标。正如您所指出的那样,C++/Cx不是托管语言,因此不能用于调用托管代码。选择C++/CLI的主要原因是与托管代码的互操作性。如果您需要从桌面应用程序调用Windows Runtime,则C++/Cx是一个很好的选择。

Windows Runtime仅适用于Windows 8及更高版本。


“枚举应用程序包示例”在VS2017中无法编译。因此,它并不是答案的特别有用的部分。但它很有趣。 - eric frazer

-3

C++/CX的维基百科页面第一行是:

C++/CX(组件扩展)是微软为C++编译器开发的语言扩展,使C++程序员能够为新的Windows Runtime平台或WinRT编写程序(重点添加)

因此,C++/CX似乎就像C++/CLI对于.Net/CLR一样对应于WinRT。也就是说,C++/CX用于使用WinRT编写Windows应用程序。WinRT适用于Windows 8商店和Metro应用程序。

您可以使用C++编写常规的Windows API应用程序,因此您可能也可以在C++/CX中执行相同的操作。但这可能不容易或不可能,但由于扩展是针对WinRT特定的,所以为什么要这样做呢?将C++/CX生成不依赖于WinRT的可执行文件是问题的关键。

这篇SO的帖子表明WinRT只适用于Windows 8。(很可能也适用于Windows 10。)


“...所以你可能能够”并没有真正回答我的问题。感谢(强调)维基百科的引用,但那也不是我的问题之一。我知道C++/CX是针对WinRT的。 - Noah Roth
@NoahRoth 我不知道让MS C++/CX编译器生成一个不依赖WinRT的可执行文件有多难或是否可能。如果你能做到,那么你的答案是肯定的。我已经编辑了答案以澄清这一点。除非你所说的“normal app”指的是WinRT桌面应用程序,在这种情况下我的答案可能无关紧要;我假设“normal”应用程序是使用WinAPI的Windows程序;WinAPI是包括在每个Windows版本中的基本API,并进行扩展。 - esoterik
1
这个回答非常模糊,并且在试图具体说明时是错误的。你可以轻松地在Windows桌面应用程序中使用Windows Runtime组件。毕竟,它只是COM,可以通过C++/CX语言扩展、WRL代码甚至是普通的C或C++代码来使用。 - IInspectable
Iinspectable的回答是正确的,Windows Runtime基于COM,查看此课程以获取更多详细信息,https://www.pluralsight.com/courses/windows-runtime-essentials - Khoi V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接