2012-09-17 12 views
15

Meine Entwicklungsplattform ist Windows 7 x64. Ich habe VS2012 installiert und möchte ein Projekt kompilieren, das etwas Dx11-Code enthält.d3dx11.h nicht in Windows 8.0 Kit

Insbesondere umfasst es die folgenden Dateien:

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

und Links zu

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

ich schon VS2011 auf meinem Entwicklungscomputer installiert haben, aber ich wollte, dass die Einheit Prüfanlagen in VS2012 versuchen für natives C++.

Da VS2011 auf DirectShow-Code installiert ist und funktioniert, habe ich das Windows 7.1 SDK installiert.

VS2012 nahm dies und hatte Hinweise auf das 7.1 SDK, sondern Zusammenstellung meines Projekts unter VS2012 mit dem 7.1 SDK verwiesen gab Fehler:

"warning C4005: '__useHeader' : macro redefinition" 

ich diese gegoogelt und fand a query like mine on social.msdn.microsoft.com. und die Lösung empfahl die Verknüpfung mit dem Windows 8 Kit anstelle des 7.1 SDK, um dieses Problem zu lösen.

Das Windows 8 Kit enthält Header wie d3d11.h, aber nicht d3dx11.h.

Wie kann ich d3dx11 (aus dem Dx SDK) zusammen mit dem Windows 8-Kit hinzufügen, aber ohne mehrere "Makro-Neudefinition" -Fehler zu bekommen?

Antwort

17

Ich fand das folgende eher ärgerliche Zitat in this MSDN page.

D3DX ist nicht die kanonische API für die Verwendung von Direct3D in Windows 8 betrachtet und ist daher nicht mit dem entsprechenden Windows SDK enthält. Untersuchen Sie alternative Lösungen für die Arbeit mit der Direct3D-API.

Für ältere Projekte, wie zum Beispiel des Windows 7 (und früher) DirectX SDK Proben, sind folgende Schritte notwendig Anwendungen zu erstellen, mit D3DX dem DirectX SDK:


Ändern des Projektes VC++ Verzeichnisse wie folgt, um die richtige Bestellung für SDK-Header und Bibliotheken zu verwenden.

i. Öffnen Sie die Eigenschaften für das Projekt und wählen Sie die Seite VC++ - Verzeichnisse .
ii. Wählen Sie Alle Konfigurationen und Alle Plattformen.
iii. Setzen Sie diese Verzeichnisse wie folgt:

Executable-Verzeichnisse: (Auf der rechten Seite Drop-down)

Fügen Sie Verzeichnisse: $ (IncludePath); $ (DXSDK_DIR) einschließen

Bibliotheksverzeichnisse einbeziehen : $ (LibraryPath);

x86 Lib \ $ (DXSDK_DIR)

iv. Klicken Sie auf Anwenden.
v. Wählen Sie die x64-Plattform. vi. Stellen Sie das Bibliotheksverzeichnis wie folgt:

Bibliotheksverzeichnisse: $ (LibraryPath); $ (DXSDK_DIR) Lib \ x64

Wherever "d3dx9.h", "d3dx10.h" oder "d3dx11.h" sind in Ihrem Projekt enthalten, stellen Sie sicher, dass Sie explizit "d3d9.h", "d3d10.h" und "dxgi.h" oder "d3d11.h" und "dxgi.h" angeben. zuerst, um sicherzustellen, dass Sie die neuere Version abholen.

Sie können die Warnung C4005 bei Bedarf deaktivieren; Diese Warnung zeigt jedoch an, dass Sie die ältere Version dieser Header verwenden.

Entfernen Sie alle Verweise auf DXGIType.h in Ihrem Projekt. Dieser Header ist nicht in dem Windows SDK vorhanden und die DirectX SDK-Version Konflikt mit dem neuen winerror.h.

Alle D3DX-DLLs werden von der DirectX SDK-Installation auf Ihrem Entwicklungscomputer installiert. Stellen Sie sicher, dass die erforderlichen D3DX-Abhängigkeiten mit jeder Probe oder mit Ihrer Anwendung neu verteilt werden, wenn sie auf einen anderen Rechner verschoben wurde ( ).

Beachten Sie, dass Ersatztechnologien für aktuelle Anwendungen von D3DX11 DirectXTex und DirectXTK enthalten. D3DXMath wird durch DirectXMath ersetzt.

FFS Microsoft, bitte nicht die API-Mid-Version so ändern !!!

+7

Einverstanden, vor allem, wenn alle derzeit auf DirectX11 veröffentlichten Bücher d3dx11.h ausgiebig nutzen, Wahnsinn! – JMK

Verwandte Themen