2012-09-17 9 views
15

La mia piattaforma di sviluppo è Windows 7 x64. Ho installato VS2012 e vorrei compilare un progetto che includesse un codice Dx11.d3dx11.h non nel kit Windows 8.0

In particolare, esso include i seguenti file:

#include <d3dx11.h> 
#include <d3dx10.h> 

e collegamenti a

#pragma comment (lib, "d3dx11.lib") 
#pragma comment (lib, "d3dx10.lib") 

ho già VS2011 installato sulla mia macchina di sviluppo, ma ho voluto provare gli impianti di prova dell'unità in VS2012 per nativo C++.

A causa dell'installazione e del funzionamento di VS2011 sul codice DirectShow, ho installato l'SDK di Windows 7.1.

VS2012 scelto questo e aveva riferimenti al 7.1 SDK, ma la compilazione del mio progetto in VS2012 con il 7.1 SDK fa riferimento ha dato errori:

"warning C4005: '__useHeader' : macro redefinition" 

I Googled questo e trovato a query like mine on social.msdn.microsoft.com. e la soluzione raccomandava il collegamento con il kit di Windows 8 invece dell'SDK 7.1 per risolvere questo problema.

Il kit di Windows 8 include intestazioni come d3d11.h, ma non d3dx11.h.

Come posso includere d3dx11 (dal Dx SDK) insieme al kit di Windows 8, ma senza ottenere più errori di "macro ridefinizione della macro"?

risposta

17

Ho trovato la seguente citazione piuttosto fastidiosa in this MSDN page.

D3DX non è considerato l'API canonica per utilizzare Direct3D in Windows 8 e pertanto non è inclusa con la corrispondente SDK Windows. Indagare soluzioni alternative per lavorare con l'API Direct3D.

Per i progetti precedenti, come ad esempio il Windows 7 (e versioni precedenti) DirectX SDK campioni, sono necessari per creare applicazioni con D3DX utilizzando il DirectX SDK le seguenti operazioni:


Modificare VC++ directory del progetto come segue per utilizzare l'ordine corretto per le intestazioni e le librerie SDK.

i. Aprire Proprietà per il progetto e selezionare la pagina Directories VC++.
ii. Seleziona tutte le configurazioni e tutte le piattaforme.
iii. Impostare queste directory come segue:

cartelle eseguibili in: (a destra sul lato discesa)

includere le directory: $ (INCLUDEPATH); $ (DXSDK_DIR) includono

Includere directory di libreria : $ (LibraryPath); $ (DXSDK_DIR) Lib \ x86

iv. Fai clic su Applica.
v. Scegliere la piattaforma x64. vi. Impostare la directory Library come segue:

directory di libreria: $ (LibraryPath); $ (DXSDK_DIR) Lib \ x64

Ovunque "d3dx9.h", "d3dx10.h" , o "d3dx11.h" sono inclusi nel tuo progetto , assicurati di includere esplicitamente "d3d9.h", "d3d10.h" e "dxgi.h", o "d3d11.h" e "dxgi.h". per prima cosa assicurati di raccogliere la versione più recente.

È possibile disattivare l'avviso C4005 se necessario; tuttavia, questo avviso indica che stai utilizzando la versione precedente di queste intestazioni.

Rimuovere tutti i riferimenti a DXGIType.h nel progetto. Questa intestazione non esiste in Windows SDK e la versione di DirectX SDK è in conflitto con il nuovo winerror.h.

Tutte le DLL D3DX sono installate nel computer di sviluppo mediante l'installazione di SDK DirectX . Assicurarsi che le dipendenze D3DX necessarie siano ridistribuite con qualsiasi campione o con l'applicazione se è spostato su un'altra macchina.

Tenere presente che le tecnologie di sostituzione per gli usi correnti di D3DX11 includono DirectXTex e DirectXTK. D3DXMath è sostituito da DirectXMath.

FFS Microsoft, si prega di non modificare la versione centrale dell'API come questa !!!

+7

D'accordo, specialmente quando tutti i libri attualmente in vendita su DirectX11 fanno un uso estensivo di d3dx11.h, follia! – JMK