Получение VS2013, DirectXMath, XAudio2 и D3D11 для совместной работы с Windows 7

Работаю над обновлением моего продукта до новой версии компилятора и новых технологий, но Microsoft, похоже, все испортила …

  • Версия XAudio2, поставляемая с VS2013 / WinSDK, не будет работать в Windows 7, и нет флага компиляции, чтобы это исправить (установите _WIN32_WINNT на значение до 8, которое не будет даже включено, установите его выше, и его библиотека ссылок ищет новое имя DLL в любом случае).
  • Другие существующие компоненты DirectX, такие как D3D11, выглядят хорошо при использовании с их заголовками Win8 SDK и библиотеками импорта. Пользователям Win7 по-прежнему необходимо установить DirectX SDK версии d3d11.dll и т. Д.
  • Попытка поместить DirectX June 2010 SDK в путь включения (чтобы получить работающую версию XAudio2) приводит к конфликтам макросов, например, между dxgitype.h и winerror.h. Кажется, Microsoft переместила большое количество макросов в winerror.h, и перед попыткой их определения нет проверки препроцессора …
  • Заголовки DirectXMath, по-видимому, присутствуют только в заголовках Windows8 SDK, у них нет проблем с Windows 7 _WIN32_WINNT = 0x0601, но этот факт не позволяет мне перейти к более старому SDK без хрена winerror.h …

Мне интересно, смогу ли я взломать его, отменив _WIN32_WINNT, добавив Win8 XAudio2, а затем клонировав встроенные COM-оболочки версий DirectX SDK, но это оставляет меня незащищенным, если какой-либо из открытых интерфейсов XAudio2 действительно изменился (например, структуры структуры или новые члены).

Должен быть правильный способ сделать это … Если я смогу сделать это на системах Win8, используйте предоставленную ОС DLL, а не старый DX-файл для повторного распространения безопасным способом (и без компиляции моего кода дважды, я действительно хочу избежать отдельный win8 32/64 для настольных ПК поверх всех остальных), что было бы еще лучше.

1

Решение

OK нашел C / C ++, включающий взломать разрешение / обходной путь, который появляется при первоначальном тестировании для работы. Если у кого-то есть правильное решение, я бы с удовольствием

  1. Обычно, когда люди устанавливают DirectX SDK, их Visual Studio в конечном итоге получит $ (DXSDK_DIR), даже если его значение по умолчанию для пути включения отсутствует, но, как я уже сказал, просто поставить его первым не работает, так что …
  2. Определите макрос препроцессора равным «$ (DXSDK_DIR) Include \ xaudio2.h» в настройках проекта.
  3. Включите этот макрос, чтобы получить версию xaudio2.h для DXSDK независимо от пути включения. Это заняло некоторое удовольствие, так как даже при полном пути я не мог заставить MSVC указывать значение в кавычках (в настройках проекта это казалось обрезать кавычки вокруг него …).
  4. Теперь жалуется на «#include <comdecl.h>», по-видимому, это не в SDK окна и потому, что XAudio2 использовал <> это не будет забрано в каталоге. Поэтому в любом случае добавьте DXSDK_DIR \ Включить в путь включения, после Windows SDK.
  5. Каким-то чудом все, что находится в comdecl.h, не конфликтует ни с чем (что я включил, по крайней мере), и это скомпилировано и связано чисто, и работает, как и ожидалось, в системе Windows 7 (не тестировалось в Windows 8 и, конечно, не тестировалось). все же, если я смогу загрузить Win8-версию библиотеки DLL XAudio с моим собственным путем кода LoadLibrary / etc)

Включая макрос

#define INCLUDE_XAUDIO2_EXPAND(path) <path>
#include INCLUDE_XAUDIO2_EXPAND(INCLUDE_XAUDIO2)

РЕДАКТИРОВАТЬ: Это также, кажется, нарушает обнаружение ошибок IDE и автозаполнение, кажется, не в состоянии обрабатывать, которые включают …

0

Другие решения


А ты уже прошел курс программирования? Супер скидка!
Прокачать скилл $$$
×