如何设置XAudio2 DLL版本

时间:2016-02-17 11:54:00

标签: c++ visual-c++ dll visual-studio-2015 xaudio2

我的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

1 个答案:

答案 0 :(得分:4)

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

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.

如果您使用的是Windows 10 SDK,则xaudio2.h标头使用XAudio 2.9,如果_WIN32_WINNT设置为0x0A00,只有在{10}上链接xaudio2.lib时才有效。如果使用Windows 10 SDK,您可以将WIN32_WINNT设置为0x06020x0603,链接xaudio2_8.lib,它将再次使用XAudio 2.8。

要支持Windows 7或更早版本,您必须使用legacy DirectX SDK来获取XAudio 2.7标头,并且必须使用legacy DirectSetup软件包部署XAUDIO2_7.DLL。由于标头与Windows 8.x SDK和Windows 10 SDK冲突,除了需要正确设置项目包含路径之外,实际上最好对旧版Direct SDK标头进行完整路径引用。例如,音频的DirectX Tool KitAudio.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

请参阅Adding the DirectX Tool Kit for AudioXAudio2 and Windows 8Known Issues: XAudio 2.7Using the Windows Headers