Я на Windows 7 с использованием Visual Studio 2012.
Когда я компилирую, я получаю много предупреждений о переопределении макросов, вызванных winerror.h по сравнению с dxgi.h, dxgitype.h, d3d11.h, d3d10.h; например, DXGI_STATUS_OCCLUDED, DXGI_STATUS_CLIPPED, DXGI_STATUS_NO_REDIRECTION и т. д.
Я полагаю, это потому, что Windows 8 SDK установлен.
Как я могу избежать этого? Есть ли способ, которым я могу исключить эти новые библиотеки из моего проекта?
Я столкнулся с этой проблемой, используя Visual Studio 2012 Express в Windows 8; однако мои ошибки были почти такими же, и исправление сосредоточено вокруг Windows SDK. Это было в MSDN (см. № 5):
D3DX не считается каноническим API для использования Direct3D в Windows 8 и, следовательно, не входит в соответствующий Windows SDK. Изучите альтернативные решения для работы с Direct3D API.
Для устаревших проектов, таких как образцы DirectX SDK для Windows 7 (и более ранних версий), для создания приложений с использованием D3DX с использованием DirectX SDK необходимы следующие шаги:
а. Измените каталоги VC ++ проекта следующим образом, чтобы использовать правильный порядок для заголовков и библиотек SDK.
- Откройте «Свойства» для проекта и выберите страницу «Каталоги VC ++».
- Выберите Все конфигурации и Все платформы.
Установите эти каталоги следующим образом:
- Включить каталоги: $ (IncludePath); $ (DXSDK_DIR) Включить
- Библиотечные каталоги: $ (LibraryPath); $ (DXSDK_DIR) Lib \ x86
- Нажмите Применить.
- Выберите платформу x64.
Установите каталог библиотеки следующим образом:
- Библиотечные каталоги: $ (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.
д. Все библиотеки D3DX устанавливаются на ваш компьютер для разработки с помощью установки DirectX SDK. Убедитесь, что необходимые зависимости D3DX перераспределены с любым образцом или с вашим приложением, если оно перенесено на другую машину.
е. Помните, что технологии замены для текущего использования D3DX11 включают DirectXTex а также DirectXTK. D3DXMath заменяется на DirectXMath.
Не могу сказать точно, но я думаю, что Windows 8 SDK может быть вашей проблемой. Это может быть немного болезненно, но использование вышеуказанного исправления поможет сделать ваш код менее зависимым, а также совместимым с Windows 7 и Windows 8.
Я столкнулся с этой проблемой при компиляции SlimDX с Visual Studios 2012 для Windows 8. Включения Windows SDK наследуются по умолчанию, поэтому они загружаются после определенных вручную каталогов включенных проектов. Чтобы исправить это, добавьте Windows SDK в качестве первого включаемого каталога. $(WindowsSDK_IncludePath)
(Yay, мой первый ответ на Stackoverflow)
Найден, надеюсь, хороший обходной путь: создайте свой собственный заголовочный файл, который включает в себя Windows.h (в любом случае D3D11 включает в себя), отменяет определение макросов Windows и включает D3D11.h. Включите этот заголовок вместо D3D11.h.
Примечание: Очевидно, что это определяет приоритеты версий определения D3D11, а не Windows.h
// D3D11-NoRedefs.h
// Includes D3D11.h without redefinitions from Windows!
#pragma once
#include <Windows.h>
#pragma region Undefine Windows Macros
// Only undefine, if DXGIType.h has not been included yet
#ifndef __dxgitype_h__
#undef DXGI_STATUS_OCCLUDED
#undef DXGI_STATUS_CLIPPED
#undef DXGI_STATUS_NO_REDIRECTION
#undef DXGI_STATUS_NO_DESKTOP_ACCESS
#undef DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE
#undef DXGI_STATUS_MODE_CHANGED
#undef DXGI_STATUS_MODE_CHANGE_IN_PROGRESS
#undef DXGI_ERROR_INVALID_CALL
#undef DXGI_ERROR_NOT_FOUND
#undef DXGI_ERROR_MORE_DATA
#undef DXGI_ERROR_UNSUPPORTED
#undef DXGI_ERROR_DEVICE_REMOVED
#undef DXGI_ERROR_DEVICE_HUNG
#undef DXGI_ERROR_DEVICE_RESET
#undef DXGI_ERROR_WAS_STILL_DRAWING
#undef DXGI_ERROR_FRAME_STATISTICS_DISJOINT
#undef DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE
#undef DXGI_ERROR_DRIVER_INTERNAL_ERROR
#undef DXGI_ERROR_NONEXCLUSIVE
#undef DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
#undef DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED
#undef DXGI_ERROR_REMOTE_OUTOFMEMORY
#undef D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
#undef D3D11_ERROR_FILE_NOT_FOUND
#undef D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS
#undef D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD
#undef D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
#undef D3D10_ERROR_FILE_NOT_FOUND
#endif
#pragma endregion
#include <D3D11.h>
Пожалуйста, дайте мне знать, что вы думаете, и не сдерживайте критику. Я новичок в этом и знаю, что это довольно грубая сила и, вероятно, рискованно.
Я изменил настройки и включил directx из Windows Kits \ 8.0.
На самом деле я хотел вместо этого игнорировать его и использовать заголовки Windows и библиотеки, которые я использовал ранее, но, возможно, это не имеет большого значения.
Единственное, что у меня больше нет доступа к утилитам d3dx.
Другое быстрое исправление — быстрое, как в «вероятно, не лучшем долгосрочном решении» — это изменение «набора инструментов платформы» в разделе «Решение / Свойства / Общие» — в моем конкретном случае я выбрал «Visual Studio 2015 — Windows XP (v140_xp»). ) «вместо» Visual Studio 2015 (v140) «.