WinAPI 和 WinRT 的单个 DirectX/C++ 项目
Single DirectX/C++ project for both WinAPI and WinRT
目前我正在做一个简单的游戏引擎项目。我希望它独立于平台,所以一开始我只使用了经典的 Windows 桌面应用程序和 Metro Style 应用程序。
来自这张图片:
Windows APIs
我们可以看到 C/C++ 块对于这两个部分是通用的。换句话说,我想在平台配置之间轻松切换。我已经创建了简单的 WinAPI 静态库,您可以轻松地将其包含在项目中,以及 DirectX 游戏引擎,它运行良好。但是,我在使用 WinRT(用于 Metro Style 应用程序)时遇到问题。
是否可以有一个 Visual Studio 项目可以使用 WinAPI 或 WinRT?如果我可以为一款游戏提供一个单一的入口点并且只需切换底层 API,那将是完美的。
没有。生成经典 win32 exe 和 WinRT(现在通用)应用程序的单个 VS 项目是不可能的。
从理论上讲,他们本可以实现这一点,就像您可以拥有一个生成控制台应用程序或 gui 应用程序的项目一样。两者之间的区别归结为一个(或两个)标志。
经典 exe 和 WinRT 应用程序之间的区别非常大:有清单和打包以及特殊的调味料签名,更不用说资源(图标等)的指定不同了。
在 Visual studio UI 中,这由一组不同的 属性 页面表现出来,当然除了编译器 + 链接器的共同核心之外。
另一个原因是策略。 Microsoft 希望您继续前进并拥抱 WinRT API。这是适用于所有 Windows 设备的 API 集(如果您忽略房间里的 Win7 大象)。支持双模式将向开发者发出错误信号。
作为旁注,非常 windows headers (windows.h) 由 API 家族注释。 CreateNamedPipe
在 WinRT 应用程序中是 #ifdef
,或者例如经典应用程序是 CreateFile
,现代应用程序是 CreateFile2
。
目前我正在做一个简单的游戏引擎项目。我希望它独立于平台,所以一开始我只使用了经典的 Windows 桌面应用程序和 Metro Style 应用程序。
来自这张图片: Windows APIs
我们可以看到 C/C++ 块对于这两个部分是通用的。换句话说,我想在平台配置之间轻松切换。我已经创建了简单的 WinAPI 静态库,您可以轻松地将其包含在项目中,以及 DirectX 游戏引擎,它运行良好。但是,我在使用 WinRT(用于 Metro Style 应用程序)时遇到问题。
是否可以有一个 Visual Studio 项目可以使用 WinAPI 或 WinRT?如果我可以为一款游戏提供一个单一的入口点并且只需切换底层 API,那将是完美的。
没有。生成经典 win32 exe 和 WinRT(现在通用)应用程序的单个 VS 项目是不可能的。
从理论上讲,他们本可以实现这一点,就像您可以拥有一个生成控制台应用程序或 gui 应用程序的项目一样。两者之间的区别归结为一个(或两个)标志。
经典 exe 和 WinRT 应用程序之间的区别非常大:有清单和打包以及特殊的调味料签名,更不用说资源(图标等)的指定不同了。
在 Visual studio UI 中,这由一组不同的 属性 页面表现出来,当然除了编译器 + 链接器的共同核心之外。
另一个原因是策略。 Microsoft 希望您继续前进并拥抱 WinRT API。这是适用于所有 Windows 设备的 API 集(如果您忽略房间里的 Win7 大象)。支持双模式将向开发者发出错误信号。
作为旁注,非常 windows headers (windows.h) 由 API 家族注释。 CreateNamedPipe
在 WinRT 应用程序中是 #ifdef
,或者例如经典应用程序是 CreateFile
,现代应用程序是 CreateFile2
。