首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让VS2013、DirectXMath、XAudio2和D3D11协同工作

让VS2013、DirectXMath、XAudio2和D3D11协同工作
EN

Stack Overflow用户
提问于 2014-09-21 21:42:40
回答 1查看 534关注 0票数 1

正在努力将我的产品升级到新的编译器版本和新技术,但微软似乎把这件事搞得一团糟。

  • is 2013/WinSDK附带的XAudio2版本将无法在Windows 7上工作,并且没有编译标志来修复这个问题(让_WIN32_WINNT位于它甚至不会包含的8前值上,将其设置得更高,并且它的链接库无论如何都会寻找一个较新的DLL名称)。
  • 其他现有的DirectX组件(如D3D11 )在与它们的Win8 SDK头和导入库一起使用时似乎很好。Win7用户仍然需要安装d3d11.dll等DirectX SDK版本。
  • 尝试将DirectX 2010年6月的SDK放入包含路径(以获得将工作的XAudio2版本),会导致宏冲突,例如dxgitype.h和winerror.h之间的冲突。微软似乎将大量宏移动到winerror.h中,在尝试定义它们之前没有任何预处理检查.
  • DirectXMath标头似乎只在Windows8 SDK头中,它们与Windows7 _WIN32_WINNT=0x0601没有问题,但是这个事实阻止了我在没有winerror.h垃圾的情况下使用旧的_WIN32_WINNT=0x0601.

我想知道是否可以通过取消_WIN32_WINNT以包含Win8 XAudio2,然后克隆DirectX SDK版本的内联COM包装器来破解它,但如果任何XAudio2公共接口实际更改(例如结构布局或新成员),这会使我暴露出来。

一定有合适的方法.如果我能够在Win8系统上使用操作系统提供的DLL而不是旧的DX以一种安全的方式(并且不编译我的代码两次,我真的想避免在所有其他桌面上单独使用win8 32/64桌面exe ),那就更好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 22:14:25

OK找到了一个C/C++包括分辨率黑客/解决方案,出现在最初的测试工作。如果有人有合适的解决方案我很喜欢

  1. 通常情况下,当人们安装DirectX SDK时,他们的Visual最终将得到$(DXSDK_DIR),即使它在包含路径上不是默认的,但是就像我说过的,仅仅把它放在第一个不起作用,所以.
  2. 在项目设置中将预处理宏定义为等于“$(DXSDK_DIR)Include\xaudo2.h”。
  3. 包含该宏,以获得xaudo2.h的DXSDK版本,而不管包含路径如何。这花费了一些乐趣,因为即使有了完整的路径,我也无法让MSVC提供一个引用的值(它似乎在项目设置中去掉了它周围的引号……)。
  4. 现在它抱怨"#include ",很明显这不是在窗口的SDK中,而且由于XAudio2使用了<>,所以不会在目录中找到它。因此,无论如何,将DXSDK_DIR\Include添加到包含路径,在Windows 之后。
  5. 奇迹的是,不管是什么,无论是什么都没有冲突(至少我已经包括了),这个编译和链接干净,并运行在窗口的7系统上(没有在Windows 8上测试,当然也没有测试,如果我能用我自己的LoadLibrary/etc代码路径加载XAudio DLL的XAudio版本)

包括宏

代码语言:javascript
复制
#define INCLUDE_XAUDIO2_EXPAND(path) <path>
#include INCLUDE_XAUDIO2_EXPAND(INCLUDE_XAUDIO2)

编辑:这似乎也破坏了IDE的错误检测和自动完成,它似乎无法处理,其中包括.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25964167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档