1

我从 2010 年 6 月开始从 DirectX 11 SDK 中的一个示例中实现了代码。我在 2012 年打开了我的项目,然后我也在 2012 年打开了示例,但是当我运行我的时,它需要 XAudio2_8.dll。这是什可能吗?那是 Windows 8 中的 .dll,而 SDK 中的代码是 2010 年的 - 当时不存在这样的 .dll?最奇怪的是 SDK 示例构建并运行,而我的项目要求提供 .dll.I链接了所有的库,制作了所有的包含,我检查了项目设置,在整个硬盘驱动器中搜索了这样的 dll,没有...什么可能导致这样的问题?我也遇到了各种各样的其他问题在 VS2012 下的 SDK 中,例如无法识别 dx11 标头中的类型等。

4

2 回答 2

3

Windows 8.x SDK 集成了 DirectX SDK,这对于许多领域来说意味着您根本不需要使用旧的 DirectX SDK。特别是,Direct3D、DirectSound、DirectInput 等在 Windows 8.x SDK 中都有正确的头文件和库。

DirectX SDK 非常古老,因此缺少一些旧的东西:没有 DirectMusic 播放、DirectPlay 等。我有一篇博客文章提供了 DirectX SDK 中所有内容的完整清单。

变得复杂的地方是 XAudio 和 XInput。XAudio 2.8 和 XInput 1.4 都是 Windows 8.x 操作系统的一部分,但在 Windows 7 上不可用。如果您的目标是“下级”到 Windows 7,则必须使用 XAudio 2.7 和 XInput 1.3 或 XInput 9.1 .0. 这个有点混乱的故事在两个博客条目中进行了介绍:一个用于XInput,另一个用于XAudio。好消息是 XInput 的大多数使用实际上都可以通过 XInput 9.1.0 实现,它是从 Windows Vista 开始的 Windows 操作系统的一部分。它是 XAudio 的“下级”,需要混合现代 Windows 8.x SDK 和旧版 DirectX SDK,并且必须使用旧版 DirectX SDK REDIST (DirectSetup)。

您收到“运行时”错误而不是“编译时”错误的根本原因是您没有将 _WIN32_WINNT 设置为 Windows 7 的 0x0601(或 Windows Vista 的 0x0600)。如果您有,Windows 8.x SDK 中的 XINPUT.H 标头将自动使用 XInput 9.1.0 版本,而 Windows 8.x SDK 中的 XAUIOD2.H 标头会出错并告诉您它不会运行适用于 Windows 7。

最后,我清理了许多旧的 Direct SDK 示例并将其重新发布到MSDN 代码库,这样它们就不需要旧的 DirectX SDK。

于 2014-06-27T18:42:43.800 回答
1

基本规则是,如果你在 Win 8 上开发 XAudio2 程序,使用 Windows SDK,否则使用 DirectX SDK。

如果您正在使用 Win7,请确保

  1. 您使用的头文件 XAudio2.h 来自 DirectX SDK,类似于 C:\Program Files\Microsoft DirectX SDK (June 2010)\Include\XAudio2.h,而不来自 Win8 SDK,类似于 C:\ Program Files\Windows Kits\8.0\Include\um\XAudio2.h(如果您安装了 Win8 SDK)
  2. 调用 CoInitializeEx(NULL, COINIT_MULTITHREADED); 在调用XAudio2Create之前,由于XAaudio2的旧版本(2.8之前)是COM创建的,所以不需要.lib文件,Win8之前的XAudio2没有.lib文件。

下面这个页面包含了XAudio2版本的详细介绍,大家可以看看。

XAudio2 版本

于 2012-10-14T10:17:40.203 回答