我的 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
?
更新: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。如果您为 Windows 7 兼容的 exe 正确设置了_WIN32_WINNT
(即 /D _WIN32_WINNT=0x0601
或/D _WIN32_WINNT=0x0600
(,那么当你构建你的应用程序时,你会看到一个构建时失败,正是因为XAudio 2.8不支持Windows Vista或Windows 7
SDK,则xaudio2.h
标头使用 XAudio 2.9(如果_WIN32_WINNT
设置为 0x0A00
,这仅在与 Windows 10 上的xaudio2.lib
链接时有效。如果使用Windows 10 SDK,您可以将WIN32_WINNT
设置为0x0602
或0x0603
,链接到xaudio2_8.lib
,它将再次使用XAudio 2.8。
或更高版本,您应该使用 XAudio2Redist,它在 Windows 7 SP1、Windows 8 和 Windows 8.1 上提供 XAudio 2.9 功能。在Windows 10上,它会自动转发到XAudio 2.9的操作系统版本 - 如果您只支持Windows 10,则不需要XAudio2Redist,因为XAudio 2.9是Windows 10操作系统的一部分。NuGet 包包括 xaudio2_9redist.lib
和 xapobaseredist.lib
。
若要支持 Windows 7 RTM 或更早版本,必须使用旧版 DirectX SDK 获取 XAudio 2.7 标头,并且必须使用旧版 DirectSetup 包部署XAUDIO2_7.DLL
。由于标头与 Windows 8.x SDK 和 Windows 10 SDK 冲突,因此除了需要正确设置项目包含路径外,实际上最好对旧版直接 SDK 标头进行完整路径引用。
例如,用于音频 DX11/DX12 的 DirectX 工具包在Audio.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)Includecomdecl.h>
#include <C:Program Files (x86)Microsoft DirectX SDK (June 2010)Includexaudio2.h>
#include <C:Program Files (x86)Microsoft DirectX SDK (June 2010)Includexaudio2fx.h>
#include <C:Program Files (x86)Microsoft DirectX SDK (June 2010)Includexapofx.h>
#pragma warning(push)
#pragma warning( disable : 4005 )
#include <C:Program Files (x86)Microsoft DirectX SDK (June 2010)Includex3daudio.h>
#pragma warning(pop)
#pragma comment(lib,"x3daudio.lib")
#pragma comment(lib,"xapofx.lib")
#endif
请参阅添加音频、XAudio2 和 Windows 8 的 DirectX 工具包、已知问题:XAudio 2.7 和使用 Windows 标头。