Связаны ли приложения D3D9 с точной версией D3DX DLL? - PullRequest
1 голос
/ 24 мая 2011

Если я собрал свое приложение для D3DX June2007_d3dx9_34 и целевая система имеет более новую версию Nov2007_d3dx9_36, должна ли это быть проблемой?

Я распространяю библиотеки D3DX с помощью средства MS 'redist-installer, ноЯ заметил один «чистый» ПК (ранее D3DX не устанавливался), я получил ошибку об отсутствии D3DX DLL.Прежде чем пытаться выяснить, не работает ли сам установщик, я подумал, может быть, проблема заключается в том, чтобы предоставить слишком новую версию DLL - будет ли приложение искать DLL с точным именем?

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Библиотеки D3DX не имеют обратной совместимости, и API может меняться в зависимости от версии.Таким образом, целевая система должна иметь ту же версию D3DX, с которой вы строите свое приложение - более новая версия не будет работать.

Если вы используете Dependency Walker в своем приложении, она должна показатьВы, что есть зависимость от DLL с точным номером версии.

1 голос
/ 06 июля 2011

В распространяемый пакет DirectX SDK входит вся история библиотек D3DX. При установке самой последней версии распространяемого DirectX ваша система должна иметь все версии этих библиотек. Приложения могут и разрешают устанавливать только те файлы, которые им нужны, удаляя cab-файлы из структуры каталогов распространяемого пакета, чтобы уменьшить размер распространяемых компонентов, и таким образом вы можете получить 43 dll но не 37, например.

Если вы удалите зависимость dll D3DX и D3DCOMPILER из своего приложения, вы можете убедиться, что приложение будет работать, поскольку dll ядра d3d9 d3d10 и d3d11 не зависят от версии и также связаны с выпусками пакетов обновления для Windows (то есть D3D11 для Vista например, из Vista SP2 или Win7).

Другой возможный способ удалить зависимость и позволить запуску приложения - сделать dll модулем отложенной загрузки, чтобы он загружался только при необходимости (например, при компиляции шейдеров в среде разработки). Если вы уверены, что шейдеры существуют на компьютерах конечных пользователей должным образом, вам не нужно будет компилировать шейдеры и не произойдет сбой. Вызов LoadLibrary и вызов функций вручную был бы более безопасным вариантом с лучшим сообщением об ошибке по вашему выбору, но это намного больше работы.

...