d3dx11.h не в комплекте с Windows 8.0

Моя платформа разработки - Windows 7 x64. Я установил VS2012, и я хотел бы скомпилировать проект, который включает в себя некоторый код Dx11.

В частности, он включает в себя следующие файлы:

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

и ссылки на

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

У меня уже есть VS2011, установленный на моей машине разработки, но я хотел попробовать средства модульного тестирования в VS2012 для родного C++.

Из-за того, что VS2011 установлен и работает с кодом DirectShow, у меня установлен Windows 7.1 SDK.

VS2012 подхватил это и имел ссылки на 7.1 SDK, но компиляция моего проекта под VS2012 со ссылками на 7.1 SDK дала ошибки:

"warning C4005: '__useHeader' : macro redefinition"

Я прогуглил это и нашел запрос, подобный моему, на social.msdn.microsoft.com. и решение рекомендовало связать с комплектом Windows 8 вместо 7.1 SDK для решения этой проблемы.

В комплект Windows 8 входят заголовки, такие как d3d11.h, но не d3dx11.h.

Как я могу включить d3dx11 (из Dx SDK) вместе с комплектом Windows 8, но без множественных ошибок "переопределения макросов"?

1 ответ

Решение

Я нашел следующую довольно раздражающую цитату на этой странице MSDN.

D3DX не считается каноническим API для использования Direct3D в Windows 8 и, следовательно, не входит в соответствующий Windows SDK. Изучите альтернативные решения для работы с Direct3D API.

Для устаревших проектов, таких как образцы DirectX SDK для Windows 7 (и более ранних версий), для создания приложений с использованием D3DX с использованием DirectX SDK необходимы следующие шаги:


Измените каталоги VC++ проекта следующим образом, чтобы использовать правильный порядок для заголовков и библиотек SDK.

я. Откройте "Свойства" для проекта и выберите страницу "Каталоги VC++".
II. Выберите Все конфигурации и Все платформы.
III. Установите эти каталоги следующим образом:

Исполняемые каталоги: (в раскрывающемся списке справа)

Включить каталоги: $(IncludePath);$(DXSDK_DIR) Включить

Включить каталоги библиотеки: $(LibraryPath);$(DXSDK_DIR)Lib\x86

внутривенно Нажмите Применить.
v. Выберите платформу x64. VI. Установите каталог библиотеки следующим образом:

Библиотечные каталоги: $(LibraryPath);$(DXSDK_DIR)Lib\x64

Везде, где "d3dx9.h", "d3dx10.h" или "d3dx11.h" включены в ваш проект, обязательно включите "d3d9.h", "d3d10.h" и "dxgi.h" или " Сначала d3d11.h"и" dxgi.h ", чтобы убедиться, что вы выбираете более новую версию.

При необходимости вы можете отключить предупреждение C4005; однако это предупреждение указывает на то, что вы используете более старую версию этих заголовков.

Удалите все ссылки на DXGIType.h в вашем проекте. Этот заголовок не существует в Windows SDK, и версия DirectX SDK конфликтует с новым winerror.h.

Все библиотеки DLL D3DX устанавливаются на компьютер разработчика с помощью установки DirectX SDK. Убедитесь, что необходимые зависимости D3DX перераспределены с любым образцом или с вашим приложением, если оно перенесено на другую машину.

Имейте в виду, что технологии замены для современных применений D3DX11 включают DirectXTex и DirectXTK. D3DXMath заменяется DirectXMath.

FFS Microsoft, пожалуйста, не меняйте среднюю версию API, как это!!!

Другие вопросы по тегам