如何设置XAudio2 dll版本

Nic*_*ick 2 c++ dll xaudio2 visual-c++ visual-studio-2015

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

<AdditionalDependencies>xaudio2.lib;%(AdditionalDependencies)</AdditionalDependencies>
Run Code Online (Sandbox Code Playgroud)

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

因此,似乎编译器(或链接器)已决定仅使用2_8版本。

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

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

Chu*_*urn 5

如果您使用的是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:

This version of XAudio2 is available only in Windows 8 or later. Use
the XAudio2 headers and libraries from the DirectX SDK with applications
that target Windows 7 and earlier versions.
Run Code Online (Sandbox Code Playgroud)

如果使用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或更早版本,您必须使用旧版DirectX SDK来获取XAudio 2.7标头,并且必须XAUDIO2_7.DLL使用旧版DirectSetup程序包进行部署。由于标题与Windows 8.x SDK和Windows 10 SDK冲突,因此,除了需要正确设置项目的包含路径之外,实际上最好对旧版Direct SDK标题进行全路径引用。例如,DirectX音频工具包Audio.h标题中包含以下内容:

#if (_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/)
#if defined(_MSC_VER) && (_MSC_VER < 1700)
#error DirectX Tool Kit for Audio does not support VS 2010 without the DirectX SDK 
#endif
#include <xaudio2.h>
#include <xaudio2fx.h>
#include <x3daudio.h>
#include <xapofx.h>
#pragma comment(lib,"xaudio2.lib")
#else
// 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
Run Code Online (Sandbox Code Playgroud)

请参阅添加DirectX Tool Kit for AudioXAudio2和Windows 8已知问题:XAudio 2.7使用Windows标头