синтаксическая ошибка: идентификатор 'DXGI_RGBA в файле dxgi1_2.h

Пытаюсь интегрировать инструментарий Directx в свою игру. Я выполнил шаги здесь:

https://github.com/Microsoft/DirectXTK/wiki/Adding-the-DirectX-Tool-Kit

и все прошло отлично. При попытке включить один из заголовков (SpriteFont.h) я получаю эти ошибкивведите здесь описание изображения:

Я преобразовал проект в 8.1, чтобы он соответствовал моей игре, и пересобрал импортированный проект, и он отлично работает. Именно при перестройке моего проекта я получаю эту ошибку.

(Я уже убедился, что windows.h включен перед моими заголовками DirectX.

Помощь!


person Scumble373    schedule 03.07.2016    source источник


Ответы (3)


Более чем вероятно, что вы смешиваете устаревшие заголовки DirectX SDK с заголовками Windows 8.x SDK и смешиваете старые заголовки DXGI с новыми. Как подробно описано в MSDN, если вы хотите смешать старый DirectX SDK с Windows 8.x SDK, вам необходимо инвертировать традиционный порядок пути включения.

Не используйте это:

<IncludePath>$(DXSDK_DIR)Include$(IncludePath);</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x86$(LibraryPath);</LibraryPath>
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(LibraryPath);</LibraryPath>

Использовать это:

<IncludePath>$(IncludePath);$(DXSDK_DIR)Include</IncludePath>
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x86</LibraryPath>
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x64;</LibraryPath>

Есть также некоторые приемы #include, если вы используете старые вещи, такие как заголовки D3DX, которые могут неявно подобрать старые заголовки.

В идеале вы должны удалить все пути использования устаревших путей DirectX SDK, но если вы хотите использовать XAudio в Windows 7, вам нужно продолжать его использовать. Подробнее см. в вики.

person Chuck Walbourn    schedule 04.07.2016
comment
Привет ! У меня точно такая же ошибка, как у Scrumble. Я сделал точно так, как вы сказали в своем ответе, но ошибка все равно остается. Я также включал ‹windows.h› перед заголовками DX. Мой проект компилировался (с прямым x), пока я не начал создавать классы, наследуемые от некоторых других классов, как вы думаете, это может быть причиной ошибки? (у меня Windows 10, 64 бит). Было бы замечательно, если бы у вас было немного времени, чтобы помочь! Спасибо :) - person Myriam Sarah; 25.12.2017
comment
От каких классов вы «наследуетесь»? - person Chuck Walbourn; 01.01.2018

возможно, вы можете попробовать #include "SpriteFont.h" в файле .cpp вместо файла заголовка .h. Я решил эту проблему таким образом.

person stephen    schedule 03.12.2018

Если вы хотите использовать устаревший DirectX SDK и более новую версию Visual Studio (например, vs2015, vs2017 или vs2019). Я рекомендую вам прочитать эту ссылку с официального сайта книги. Я думаю, что официальный сайт что-то упускает:

  1. Для каждого примера кода, который вы компилируете, убедитесь, что

    $(DXSDK_DIR)\Утилиты\bin\x86; перед $(ExecutablePath);

    ....\Общие;$(DXSDK_DIR)\Включить; до $(IncludePath)

    $(DXSDK_DIR)\Lib\x86;....\Common;$(VC_LibraryPath_x86); до $(WindowsSDK_LibraryPath_x86)

введите здесь описание изображения при создании структуры эффектов вы также должны гарантировать этот порядок.

  1. Скопируйте файлы: d3dx11effect.h, Effects11d.lib и Effects11.lib в общий каталог книги. (перезапись старых)..

После того, как вы скопируете d3dx11effect.h в общий каталог, вам нужно изменить одну строку следующим образом: Думаю, это может помочь @Scumble373

  1. Если вы перейдете через эту ошибку

dxerr.lib(dxerrw.obj): ошибка LNK2019: неразрешенный внешний символ __vsnwprintf, указанный в функции long __stdcall StringVPrintfWorkerW(unsigned short *,unsigned int,unsigned int *,unsigned short const *,char *) (?StringVPrintfWorkerW@@YGJPAGIPAIPBGPAD@Z )

вы можете добавить legacy_stdio_definitions.lib; например: введите здесь описание изображения без необходимости добавлять dxerr.h и dxerr.cpp в общий каталог книги и добавьте эти два файла в свой проект, а dxerr.h и dxerr.cpp теперь здесь.

  1. Я коммит свой сборочный код vs2019 здесь. Это демо-версия главы 1 и главы 6, которую можно собрать. Но я буду создавать больше глав по мере изучения этой книги.

Не стесняйтесь оставлять комментарии здесь или в репозитории github!

person shuyan    schedule 30.06.2020