Пытаюсь интегрировать инструментарий Directx в свою игру. Я выполнил шаги здесь:
https://github.com/Microsoft/DirectXTK/wiki/Adding-the-DirectX-Tool-Kit
и все прошло отлично. При попытке включить один из заголовков (SpriteFont.h) я получаю эти ошибки
:
Я преобразовал проект в 8.1, чтобы он соответствовал моей игре, и пересобрал импортированный проект, и он отлично работает. Именно при перестройке моего проекта я получаю эту ошибку.
(Я уже убедился, что windows.h включен перед моими заголовками DirectX.
Помощь!
Ответ 1 · рейтинг 5 · Chuck Walbourn
Более чем вероятно, что вы смешиваете устаревшие заголовки 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, вам нужно продолжать его использовать. Подробнее см. в вики.
Ответ 3 · shuyan
Если вы хотите использовать устаревший DirectX SDK и более новую версию Visual Studio (например, vs2015, vs2017 или vs2019). Я рекомендую вам прочитать эту ссылку с официального сайта книги. Я думаю, что официальный сайт что-то упускает:
Для каждого примера кода, который вы компилируете, убедитесь, что
$(DXSDK_DIR)\Утилиты\bin\x86; перед $(ExecutablePath);
....\Общие;$(DXSDK_DIR)\Включить; до $(IncludePath)
$(DXSDK_DIR)\Lib\x86;....\Common;$(VC_LibraryPath_x86); до $(WindowsSDK_LibraryPath_x86)
при создании структуры эффектов вы также должны гарантировать этот порядок.
- Скопируйте файлы: d3dx11effect.h, Effects11d.lib и Effects11.lib в общий каталог книги. (перезапись старых)..
После того, как вы скопируете d3dx11effect.h в общий каталог, вам нужно изменить одну строку следующим образом:
- Если вы перейдете через эту ошибку
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 теперь здесь.
- Я коммит свой сборочный код vs2019 здесь. Это демо-версия главы 1 и главы 6, которую можно собрать. Но я буду создавать больше глав по мере изучения этой книги.
Не стесняйтесь оставлять комментарии здесь или в репозитории github!