WinAPI和WinRT

时间:2016-02-10 10:55:15

标签: c++ winapi windows-runtime directx game-engine

目前我正在开发一个简单的游戏引擎项目。我希望它独立于平台,所以一开始我只采用了经典的Windows桌面应用程序和Metro Style应用程序。

从这张图片: Windows APIs

我们可以看到C / C ++块对于这两个部分都很常见。换句话说,我想在平台配置之间轻松切换。我已经创建了简单的WinAPI静态库,您可以轻松地将其包含在项目中,以及DirectX游戏引擎,它可以完美地运行。但是,我遇到了与WinRT(在Metro Style应用程序中使用)相同的问题。

是否可以拥有一个可以使用WinAPI或WinRT的Visual Studio项目?如果我可以为游戏提供一个单一的入口点并且只是切换底层API,那将是完美的。

1 个答案:

答案 0 :(得分:1)

没有。无法生成经典的win32 exe和WinRT(现在的Universal)应用程序的单个VS项目。

理论上,他们可以使它成为可能,就像你可以有一个生成控制台应用程序或gui应用程序的项目一样。两者之间的区别归结为一(或两)个标志。

经典exe和WinRT应用程序之间的差异非常大:有清单和包装以及特殊的酱汁签名,更不用说资源(图标等)的指定方式不同。

在Visual Studio UI中,除了编译器+链接器的通用核心之外,它由一组不同的属性页表示。

另一个原因是策略之一。 Microsoft希望您继续前进并拥抱WinRT API。这是适用于所有Windows设备的API集(如果忽略房间中的Win7大象)。支持双模式会向开发人员发送错误的信号。

作为旁注,windows标题(windows.h)由API系列注释。 WinRT应用中的CreateNamedPipe#ifdef,例如,经典应用为CreateFile,现代应用为CreateFile2