2012-09-17 10 views
15

Mi plataforma de desarrollo es Windows 7 x64. He instalado VS2012 y me gustaría compilar un proyecto que incluye algunos códigos Dx11.d3dx11.h no en el kit de Windows 8.0

En concreto, se incluye los siguientes archivos:

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

y enlaces a

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

ya he VS2011 instalado en mi máquina de desarrollo, pero quería probar las instalaciones de pruebas de unidad en VS2012 para C++ nativo.

Debido a que tengo instalado VS2011 y estoy trabajando en el código de DirectShow, tengo instalado el SDK de Windows 7.1.

VS2012 abordó esta cuestión y tenía referencias al 7.1 SDK, pero compilación de mi proyecto en VS2012 con el 7.1 SDK de referencia dio errores:

"warning C4005: '__useHeader' : macro redefinition" 

Busqué en Google y encontré este a query like mine on social.msdn.microsoft.com. y la solución recomienda vincular el kit de Windows 8 en lugar del SDK 7.1 para resolver este problema.

El kit de Windows 8 incluye encabezados como d3d11.h, pero no d3dx11.h.

¿Cómo puedo incluir d3dx11 (del Dx SDK) junto con el kit de Windows 8, pero sin obtener múltiples errores de "redefinición de macros"?

Respuesta

17

Encontré la siguiente cita bastante molesta en this MSDN page.

D3DX no se considera la API canónica para el uso de Direct3D en Windows 8 y por lo tanto no se incluye con el correspondiente SDK de Windows. Investigue soluciones alternativas para trabajar con Direct3D API.

Para proyectos heredados, como el Windows 7 (y versiones anteriores) DirectX SDK muestras, los siguientes pasos son necesarios para construir aplicaciones con D3DX utilizando el SDK de DirectX:


modificar los directorios de VC++ del proyecto de la siguiente manera para usar el orden correcto para encabezados y bibliotecas de SDK.

i. Abra Propiedades para el proyecto y seleccione la página Directorios de VC++.
ii. Seleccione todas las configuraciones y todas las plataformas.
iii. Establecer estos directorios de la siguiente manera:

directorios ejecutables: (en el lado derecho desplegable)

directorios include: $ (IncludePath); $ (DXSDK_DIR) Incluir

Incluir directorios de las librerías : $ (LibraryPath); $ (DXSDK_DIR) Lib \ x86

iv. Haga clic en Aplicar.
v. Elija la plataforma x64. vi. Establecer el directorio de la biblioteca de la siguiente manera:

Directorios Bibliotecas: $ (LibraryPath); $ (DXSDK_DIR) Lib \ x64

Dondequiera "d3dx9.h", "d3dx10.h" o "d3dx11.h" están incluidos en su proyecto , asegúrese de incluir explícitamente "d3d9.h", "d3d10.h" y "dxgi.h", o "d3d11.h" y "dxgi.h" primero para asegurarse de que está recogiendo la versión más nueva.

Puede deshabilitar la advertencia C4005 si es necesario; sin embargo, esta advertencia indica que está utilizando la versión anterior de estos encabezados.

Elimine todas las referencias a DXGIType.h en su proyecto. Este encabezado no existe en el SDK de Windows, y la versión del DirectX SDK entra en conflicto con el nuevo winerror.h.

Todas las DLL de D3DX se instalan en su computadora de desarrollo mediante la instalación de DirectX SDK . Asegúrese de que las dependencias D3DX necesarias se redistribuyan con cualquier muestra o con su aplicación si es trasladado a otra máquina.

Tenga en cuenta que las tecnologías de reemplazo para los usos actuales de D3DX11 incluyen DirectXTex y DirectXTK. D3DXMath es reemplazado por DirectXMath.

FFS Microsoft, ¡no cambie la versión media de la API como esta!

+7

De acuerdo, especialmente cuando todos los libros actualmente en DirectX11 hacen un uso extensivo de d3dx11.h, locura! – JMK

Cuestiones relacionadas