1

我正在製作基於DirectX 11的項目。以前,我一直使用Visual Studio 2012和v110工具集開發它。然後我需要使用C++ 11標準,所以我決定將它移到Visual Studio 2015.我也使用Windows 7,並希望我的項目與此平臺兼容(所以我使用標準的Win項目,而不是用於通用平臺)。如何在Windows 7上將DirectX 11與Visual Studio 2015工具集v140一起使用

在這裏,我遇到了新的VS工具集v140的問題。由於使用DirectX 11 2010年6月SDK我遇到了下一個編譯錯誤:

1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1271): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1271): error C2143: syntax error: missing ',' before '*' 
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1275): error C2061: syntax error: identifier 'DXGI_RGBA' 

我也使用effects11和D3DX。所以我必須用新的工具集重新編譯effects11。 D3DX庫怎麼樣 - 我知道這不是推薦使用。在我看來,這個庫會導致編譯錯誤。

此外,我已經在一個新的明確項目中直接從Windows套件中檢查DirectX 11的使用情況(在我的情況下,它使用的是8.1套件)。沒有D3DX庫,它工作正常。

有什麼辦法可以同時使用D3DX庫和Win Kits,這樣它就不會產生兼容性問題?或者我應該使用一些庫而不是D3DX(如DXTK)?

UPD

我試圖從我的項目,D3DX11Tex排除D3DX並完全適應它的Windows套件\ 8.1 \ + DirectXMath + DirectXTex(庫從微軟的GIT)。下一個錯誤發生了6次:

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtree(2047): error C3848: expression having type 'const `anonymous-namespace'::StringCompare' would lose some const-volatile qualifiers in order to call 'bool `anonymous-namespace'::StringCompare::operator()(PCHAR,PCHAR)' 

xtree.h包含的目錄自動包含在項目路徑中。據我所知,這是可以的。

whick導致此錯誤的代碼是下一個:

bool _Compare(const key_type& _Left, const key_type& _Right) const 
{ // compare key_type to key_type, with debug checks 
    return (_DEBUG_LT_PRED(this->_Getcomp(), _Left, _Right)); 
} 

而且這6點的誤差在xtree.h代碼。順便說一句,我包括d3d11.h在許多頭,這是相互關聯的許多倍(等等之類的d3d11.h不上層次的頂層爲單包括但在層次結構的每個文件都包括,這個標題)。

問題:這個文件在哪裏使用(我不直接包含它)?它可能是一個鏈接問題的國王嗎?或者它是一些版本之間的某種衝突(我不知道如何,僅僅因爲我不使用Dx11 2010年6月SDK,並且不嘗試鏈接一些不存在的頭文件,如D3DX11Tex)?

SOLUTION:xtree.h是自定義的函子爲STD中的問題::地圖與非常數算子()。所以把它改爲一個恆定的解決了所有6個錯誤。

DirectX問題怎麼樣...不幸的是,它是真的沒有辦法使用舊版本的新VS.正如答案和評論中提到的那樣,根本不要使用D3DX。謝謝大家!

+0

一定要看到[MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx),[哪裏的DirectX SDK(2015年版)?(HTTPS ://blogs.msdn.microsoft.com/chuckw/2015/08/05/where-is-the-directx-sdk-2015-edition/)和[Living without D3DX](https://blogs.msdn。 microsoft.com/chuckw/2013/08/20/living-without-d3dx/)。 –

+0

爲什麼這個標記關閉?這是一個完全合理的問題。 – Robinson

+0

這是真的沒有辦法使用舊的DirectX 11 SDK(2010年6月)與Win Kits的新SDK。所有你需要的是將所有「舊代碼」從庫中改爲新代碼,並在答案中提到。你需要做的最後一件事是強制**正確的** _WIN32_WINNT版本,因爲新庫使用它來決定應該使用哪些函數(例如CreateFile2(Win8和更新)或CreateFile(Win7兼容)不敢肯定我有把這個成解決方案,我應該刪除我自己的的XTree,我認爲與DirectX SDK中。 –

回答

2

2010年6月SDK是很老了,衝突與最新的Windows套件,如你所看到的。 Direct3DX也被棄用,而且現在還沒有真正的工作要做。它

部分已經在公共GitHub的帳戶改寫由微軟,命名爲dxtk。你可以考慮使用它。但是,您將無法使原始D3DX與現代版本的Windows SDK一起工作。

的解決問題的方法是刪除在2010年6月的DirectX SDK的依賴,並替換您的項目使用了已棄用的功能的一部分。作爲替代,請使用dxtk或您自己的重寫功能。

+0

某種聯繫謝謝,我已經試過的問題,但都得到了與xtree.h新的錯誤你是否有什麼可能導致這些錯誤的任何想法? –

+0

您是否使用來自[GitHub的(https://github.com/Microsoft/fx11)以及影響11? –

+0

是的,正是這一點[一](HTTPS ://github.com/Microsoft/FX11)我已經檢查了所有的依賴 - 所有包含的directx都來自Win Kits \ 8.1。 –

相關問題