2

我的 MSVC 2015 C++ 应用程序项目使用xaudio2.lib. 所以 .cvxproj 包含一行

<AdditionalDependencies>xaudio2.lib;%(AdditionalDependencies)</AdditionalDependencies>

查看构建的 .exe ,我可以找到一行XAudio2_8.dll.

所以似乎编译器(或链接器)决定只使用 2_8 版本。

这导致我的应用程序无法在 Windows 7 机器上运行的问题,因为XAudio2.dll那里只安装了较低版本的,并且找不到XAudio2_8.dll.

那么如何修复/修改我的项目,以便生成的 .exe 可以在 Windows 7 上运行?例如,我如何指定使用XAudio2_7.dll

4

1 回答 1

6

更新:XAudio 2.9 功能现在可通过XAudio2Redist用于 Windows 7 SP1、Windows 8 和 Windows 10 。因此,您不再需要旧版 DirectX SDK 来针对带有XAudio2的 Windows 7,或者如果您希望在 Windows 8.x 上支持 xWMA。下面的代码已针对包含NuGet包的情况进行了更新。

如果您使用的是 Windows 8.0 SDK 或 Windows 8.1 SDK,则xaudio2.h标头和xaudio2.lib所有链接到需要 Windows 8 或更高版本的 XAudio 2.8。如果您_WIN32_WINNT正确设置了与 Windows 7 兼容的 exe(即/D _WIN32_WINNT=0x0601/D _WIN32_WINNT=0x0600),那么当您构建应用程序时,您会看到构建时失败,正是因为 Windows Vista 或 Windows 7 不支持 XAudio 2.8

如果您使用 Windows 10 SDK,则xaudio2.h标头使用 XAudio 2.9(如果_WIN32_WINNT设置为仅在 Windows 10 上0x0A00链接时有效)。xaudio2.lib如果使用 Windows 10 SDK,您可以设置WIN32_WINNT0x06020x0603,链接反对xaudio2_8.lib,它将再次使用 XAudio 2.8。

要支持 Windows 7 SP1 或更高版本,您应该使用在 Windows 7 SP1、Windows 8 和 Windows 8.1 上提供 XAudio 2.9 功能的XAudio2Redist 。在 Windows 10 上,它会自动转发到 XAudio 2.9 的操作系统版本——如果您只支持 Windows 10,则不需要XAudio2Redist,因为 XAudio 2.9 是 Windows 10 操作系统的一部分。NuGet 包包括xaudio2_9redist.libxapobaseredist.lib.

要支持 Windows 7 RTM 或更早版本,您必须使用旧版 DirectX SDK来获取 XAudio 2.7 标头,并且必须XAUDIO2_7.DLL使用旧版 DirectSetup包进行部署。由于标头与 Windows 8.x SDK 和 Windows 10 SDK 冲突,实际上最好对旧版 Direct SDK 标头进行完整路径引用,此外还需要正确设置项目包含路径。

例如,DirectX Tool Kit for Audio DX11 / DX12Audio.h标题中包含以下内容:

#if defined(USING_XAUDIO2_REDIST) || (_WIN32_WINNT >= 0x0A00 /*_WIN32_WINNT_WIN10*/)
#define USING_XAUDIO2_9
#elif (_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/)
#define USING_XAUDIO2_8
#else
#define USING_XAUDIO2_7_DIRECTX
#endif

#if defined(USING_XAUDIO2_8) || defined(USING_XAUDIO2_9)
#include <xaudio2.h>
#include <xaudio2fx.h>
#include <x3daudio.h>
#include <xapofx.h>

#ifndef USING_XAUDIO2_REDIST
#if defined(USING_XAUDIO2_8) && defined(NTDDI_WIN10)
#pragma comment(lib,"xaudio2_8.lib")
#else
#pragma comment(lib,"xaudio2.lib")
#endif
#endif
#else // USING_XAUDIO2_7_DIRECTX
// Using XAudio 2.7 requires the DirectX SDK
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\comdecl.h>
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xaudio2.h>
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xaudio2fx.h>
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xapofx.h>
#pragma warning(push)
#pragma warning( disable : 4005 )
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\x3daudio.h>
#pragma warning(pop)
#pragma comment(lib,"x3daudio.lib")
#pragma comment(lib,"xapofx.lib")
#endif

请参阅为音频、XAudio2 和 Windows 8添加 DirectX 工具包已知问题:XAudio 2.7使用 Windows 标头

于 2016-02-18T08:07:20.440 回答