我在使用Visual Studio 2012宏定義衝突WINERROR.H
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。 我該如何避免這種情況?有沒有辦法可以從我的項目中排除這些新庫?
我在使用Visual Studio 2012宏定義衝突WINERROR.H
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。 我該如何避免這種情況?有沒有辦法可以從我的項目中排除這些新庫?
我就遇到了這個問題,使用Visual Studio 2012快速在Windows 8;但是,我的錯誤幾乎完全相同,並且修復以Windows SDK爲中心。 This was in MSDN (see #5):
D3DX不被視爲在Windows 8中使用Direct3D的規範API,因此不包含在相應的Windows SDK中。調查使用Direct3D API的備用解決方案。
對於傳統項目,比如Windows 7(或更早)的DirectX SDK樣本,下面的步驟是必須與使用DirectX SDK D3DX來構建應用程序:
一個。按如下方式修改項目的VC++目錄,以便爲SDK標頭和庫使用正確的順序。
- 打開項目屬性並選擇VC++目錄頁面。
- 選擇所有配置和所有平臺。
設置這些目錄如下:
- 包含目錄:$(INCLUDEPATH); $(DXSDK_DIR)包括
- 庫目錄:$(LibraryPath); $(DXSDK_DIR)庫\ X86
- 單擊應用。
- 選擇x64平臺。
設置庫目錄如下:
- 庫目錄:$(LibraryPath); $(DXSDK_DIR)庫\ 64
灣無論何處「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。通過DirectX SDK安裝將所有D3DX DLL安裝到您的開發計算機上確保必要如果將D3DX依賴關係移動到另一臺機器,則它們會與任何示例或應用程序一起重新分發。
e。請注意,D3DX11當前使用的替代技術包括和DirectXTK。 D3DXMath被DirectXMath取代。
我不能肯定地說,但我認爲Windows 8 SDK可能是您的問題。這可能有點痛苦,但使用上面的修復將有助於使您的代碼需要較少的依賴性,並使其兼容Windows 7和Windows 8.
感謝您的廣泛答覆。自從我切換到Windows8以來,我從頭開始編寫所有內容,所以我沒有任何問題。幸運的是,用DirectXTK和FW1FontWrapper替換d3dx很容易。我會將此標記爲已接受的答案,對於那些遇到同樣問題的人來說,這將會非常有用。 –
我改變了設置,其中包括從Windows套件\ 8.0裏面的DirectX。
其實我想,而不是忽略它,並使用Windows頭文件和庫我以前用過,但也許它沒有很大的差異。
唯一的一點是,現在我要在D3DX實用程序不再訪問。
我遇到了這個問題,在Windows 8上用Visual Studios 2012編譯SlimDX。Windows SDK包含默認情況下繼承,因此它們在手動定義的項目包含目錄後加載。要修復它,請將Windows SDK添加爲第一個包含目錄。 $(WindowsSDK_IncludePath)
謝謝,我正在遵循一些更復雜的指示。這些是我需要的! – aPerfectMisterMan
也許移除對DirectX SDK的引用是**正確的**方式,但這種解決方案非常快速和整潔。 ^^ – NPS
另一個快速修復 - 快速,如在'可能不是最好的長期解決方案「 - 是在Solution/Properties/General下更改」平臺工具集「 - 在我的具體情況中,我選擇了」Visual Studio 2015 - Windows XP(v140_xp)「而不是」Visual Studio 2015(v140 )」。
(耶,我的#2的第一個答案)
發現一個,希望好,變通方法問題:請您自己的頭文件,包括WINDOWS.H(D3D11包括反正),取消定義宏的窗戶幷包含D3D11.h。包含此頭文件而不是D3D11.h。 注:顯然,這種優先定義的D3D11版本,對這些WINDOWS.H
的// D3D11-NoRedefs.h
// Includes D3D11.h without redefinitions from Windows!
#pragma once
#include <Windows.h>
//#pragma region Undefine Windows Macros
// Only undefine, if DXGIType.h has not been included yet
#ifndef __dxgitype_h__
#undef DXGI_STATUS_OCCLUDED
#undef DXGI_STATUS_CLIPPED
#undef DXGI_STATUS_NO_REDIRECTION
#undef DXGI_STATUS_NO_DESKTOP_ACCESS
#undef DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE
#undef DXGI_STATUS_MODE_CHANGED
#undef DXGI_STATUS_MODE_CHANGE_IN_PROGRESS
#undef DXGI_ERROR_INVALID_CALL
#undef DXGI_ERROR_NOT_FOUND
#undef DXGI_ERROR_MORE_DATA
#undef DXGI_ERROR_UNSUPPORTED
#undef DXGI_ERROR_DEVICE_REMOVED
#undef DXGI_ERROR_DEVICE_HUNG
#undef DXGI_ERROR_DEVICE_RESET
#undef DXGI_ERROR_WAS_STILL_DRAWING
#undef DXGI_ERROR_FRAME_STATISTICS_DISJOINT
#undef DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE
#undef DXGI_ERROR_DRIVER_INTERNAL_ERROR
#undef DXGI_ERROR_NONEXCLUSIVE
#undef DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
#undef DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED
#undef DXGI_ERROR_REMOTE_OUTOFMEMORY
#undef D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
#undef D3D11_ERROR_FILE_NOT_FOUND
#undef D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS
#undef D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD
#undef D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
#undef D3D10_ERROR_FILE_NOT_FOUND
#endif
#pragma endregion
#include <D3D11.h>
請讓我知道你在想什麼,不要憋在批評。我對此很陌生,並且知道這是相當殘暴的行爲,可能有風險。
請分享包括的順序。另外你爲什麼要在同一個文件包含結構中使用d3d10和d3d11? – Ram
@Ram,d3d10包含在d3d11的某個部分。 – chris
我嘗試刪除一切,但d3d11.h,其中又包括dxgi.h和dxgitype.h –