синтаксическая ошибка: идентификатор '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)


arrow_upward
5
arrow_downward

Более чем вероятно, что вы смешиваете устаревшие заголовки 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

arrow_upward
0
arrow_downward

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

person stephen    schedule 03.12.2018

arrow_upward
0
arrow_downward

Если вы хотите использовать устаревший 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