5

我正在尝试使用以下说明构建一些使用 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%Include\xaudio2.h>

结果:

fatal error C1083: Cannot open include file: '%DXSDK_DIR%Include\xaudio2.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-预览.aspx )

结果:

c:\program files (x86)\microsoft directx sdk (june 2010)\include\xaudio2.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)\include\dxgitype.h(12): warning C4005: 'DXGI_STATUS_OCCLUDED' : macro redefinition
       c:\program files (x86)\windows kits\8.0\include\shared\winerror.h(49449) : see previous definition of 'DXGI_STATUS_OCCLUDED'

(...ad infinitum)

(我的项目也包括 DirectX 标头。)

如果我将 DirectX SDK 包含文件夹添加到搜索路径列表的另一端,则结果相同。

在遵循这些(或任何其他)说明的同时,是否有人设法让其中任何一项工作?

4

2 回答 2

0

XAudio2 API 现在是 Windows 8 中的系统组件。Windows SDK 中提供了 XAudio2 的头文件和库。

好吧,问题在于您将 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 仍然没有过时 =)

于 2013-06-14T11:02:48.050 回答
0

嘿,对不起,我知道我迟到了,但是这篇文章

https://directxtk.codeplex.com/wikipage?title=正在添加%20the%20DirectX%20Tool%20Kit%20for%20Audio

详细说明您需要如何包含遗留的包含和库。有一点需要注意,据我了解,在包含这些目录之后,您将依赖于 Windows 8 和 10 所没有的 Microsoft DirectX SDK(2010 年 6 月)目录。这意味着当您打包您的项目时,您应该包含/运行旧版 directx redist 以便在较新的机器上安装。

您可能已经解决了这个问题,但希望其他任何发现这个问题的人都能看到。希望能帮助到你!

于 2016-04-13T15:03:21.550 回答