directx标头和winerror.h之间的宏定义冲突

キキジ*_*キジキ 14 c++ winapi directx-11 visual-studio-2012

我在使用Visual Studio 2012的Windows 7上.

当我编译时,我得到了很多由winerror.h和dxgi.h,dxgitype.h,d3d11.h,d3d10.h引起的宏重定义警告.例如DXGI_STATUS_OCCLUDED,DXGI_STATUS_CLIPPED,DXGI_STATUS_NO_REDIRECTION等.

我想这是因为安装了windows sdk 8.我怎么能避免这个?有没有办法可以从我的项目中排除这些新库?

gra*_*bot 16

我遇到了这个问题,在Windows 8上使用Visual Studios 2012编译SlimDX.Windows SDK包含默认继承,因此它们在手动定义的项目包含目录之后加载.要解决此问题,请将Windows SDK添加为第一个包含目录. $(WindowsSDK_IncludePath)


use*_*203 12

我在Windows 8上使用Visual Studio 2012 Express遇到了这个问题; 但是,我的错误几乎完全相同,修复程序以Windows SDK为中心.这是在MSDN中(见#5):

D3DX不被视为在Windows 8中使用Direct3D的规范API,因此不包含在相应的Windows SDK中.研究使用Direct3D API的备用解决方案.

对于旧版项目,例如Windows 7(及更早版本)的DirectX SDK示例,使用DirectX SDK使用D3DX构建应用程序需要执行以下步骤:

一个.按如下所示修改项目的VC++目录,以使用SDK标头和库的正确顺序.

  1. 打开项目的"属性",然后选择"VC++目录"页面.
  2. 选择所有配置和所有平台.
  3. 设置这些目录如下:

    • 包含目录:$(IncludePath); $(DXSDK_DIR)包含
    • 库目录:$(LibraryPath); $(DXSDK_DIR)Lib\x86
  4. 单击"应用"
  5. 选择x64平台.
  6. 设置库目录如下:

    • 库目录:$(LibraryPath); $(DXSDK_DIR)Lib\x64

湾 无论您的项目中包含"d3dx9.h","d3dx10.h"或"d3dx11.h",请务必明确包含"d3d9.h","d3d10.h"和"dxgi.h",或" d3d11.h"和"dxgi.h"首先确保你拿到新版本.如果需要,您可以禁用警告C4005; 但是,此警告表示您正在使用这些标头的旧版本.

C.删除项目中对DXGIType.h的所有引用.Windows SDK中不存在此标头,并且DirectX SDK版本与新的winerror.h冲突.

d.所有D3DX DLL都通过DirectX SDK安装安装到您的开发计算机上.确保将所需的D3DX依赖项与任何样本或应用程序一起重新分发(如果将其移动到另一台计算机).

即 请注意,D3DX11当前使用的替代技术包括DirectXTexDirectXTK.D3DXMath被替换DirectXMath.

我不能肯定地说,但我认为Windows 8 SDK可能是你的问题.这可能有点痛苦,但使用上面的修复将有助于使您的代码需要更少的依赖性,并使其与Windows 7和Windows 8兼容.