我正在尝试使用以下说明来构建一些使用 XAudio2 并在 Windows 7 上运行的代码:
http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275%28v=vs.85%29.aspx
正如建议的那样,我包括来自DirectX SDK的XAudio2.h:
#include <%DXSDK_DIR%Includexaudio2.h>
结果:
fatal error C1083: Cannot open include file: '%DXSDK_DIR%Includexaudio2.h': No such file or directory
哦,好吧。我很确定VC++无论如何都不会扩展这样的环境变量。所以我用直接包含它的#include
替换了它:
#include <C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Include/XAudio2.h>
(其他一些说明,也建议使用完整路径,可以在这里找到:http://blogs.msdn.com/b/chuckw/archive/2012/04/02/xaudio2-and-windows-8-consumer-preview.aspx(
结果:
c:program files (x86)microsoft directx sdk (june 2010)includexaudio2.h(20): fatal error C1083: Cannot open include file: 'comdecl.h': No such file or directory
果然,该文件包含使用尖括号的comdecl.h
,指示VC++查看当前文件夹之外的内容。
然后,我将 DirectX SDK 包含文件夹 ( $(DXSDK_DIR)/include
( 添加到项目 #include 搜索路径中,保持原样 #include,并且:
c:program files (x86)microsoft directx sdk (june 2010)includedxgitype.h(12): warning C4005: 'DXGI_STATUS_OCCLUDED' : macro redefinition
c:program files (x86)windows kits8.0includesharedwinerror.h(49449) : see previous definition of 'DXGI_STATUS_OCCLUDED'
(...ad infinitum)
(我的项目也包括 DirectX 标头。
如果我将 DirectX SDK 包含文件夹添加到搜索路径列表的另一端,则结果相同。
有没有人设法在遵循这些(或任何其他(说明的同时让其中任何一个工作?
XAudio2 API 现在是 Windows 8 中的一个系统组件。标头 XAudio2 的库在 Windows SDK 中可用。
好吧,问题是您将来自DirectX SDK的旧标头和来自Win8 SDK的新标头混合在一起,这并不打算一起使用。
大多数时候
warning C4005: macro redefinition
意味着您的代码可以很好地编译和运行。但为了防止将来可能出现的错误,您必须使用以下方法之一:
- Windows 8 SDK v110_xp工具集(项目属性 -> 常规 -> 平台工具集(和旧的 DirectX SDK。有一些缺点:在这里阅读底部
- Windows 7 SDK v100 工具集和旧的 DirectX SDK。您需要安装 Windows 7 SDK。
- 只有 Windows 8 SDK v110 平台工具集。
- 深入研究标头,隔离和剥离XAudio2的东西,并使其可以从任何SDK独立使用。但这不是一个好主意=(
:我编辑了我的答案,因为我发现XAudio仍然没有过时=(
嘿,对不起,我知道我迟到了,但这篇文章
https://directxtk.codeplex.com/wikipage?title=Adding%20the%20DirectX%20Tool%20Kit%20for%20Audio
详细说明您需要如何包含旧版包含和库。需要注意的一件事是,据我了解,在包含这些目录后,您将依赖于 Windows 8 和 10 没有的 Microsoft DirectX SDK(2010 年 6 月(目录。这意味着当您打包项目时,您应该包含/运行旧的 directx 修订版,以便在较新的计算机上安装。
您可能已经解决了这个问题,但希望其他发现此问题的人都能看到这一点。希望对您有所帮助!