DirectX несколько версий DLL? - PullRequest
       14

DirectX несколько версий DLL?

1 голос
/ 23 сентября 2011

Я вижу, что DirectX 9 имеет несколько версий DLL, например

  • d3d9.dll
  • d3d9_25.dll
  • d3d9_42.dll
  • d3d9_43.dll

Мне интересно, в чем различия и как я могу это обнаружить? Я всегда использовал GetModuleHandle("d3d9.dll");, но если приложение имеет d3d9_43.dll, тогда мой код не обнаружит, что приложение использует DirectX, не так ли? Как бы я обнаружил это без жесткого кодирования всех версий DLL?

1 Ответ

3 голосов
/ 23 сентября 2011

Если код использует D3D9, он всегда будет использовать d3d9.dll в некоторый момент. Обычно это в таблице импорта, но она может быть динамически связана (LoadLibrary). d3d9.dll предоставляет код инициализации для D3D (и COM, когда это необходимо) и экспортирует Direct3DCreate9, чтобы создать новый IDirect3D9Object.

d3d9.dll используется независимо от версии, версия указывается путем передачи D3D_SDK_VERSION в Direct3DCreate9 в качестве единственного параметра. Это указывает, какую версию следует использовать, а не имена DLL.

Чаще всего пронумерованные файлы - это файлы D3D X . Они версионированы, с _43, ссылающимся на SDK за июнь 2010 года (я полагаю, что каждый выпуск SDK имеет один). Если программе нужны вспомогательные функции, предоставляемые в D3DX, последняя версия из SDK обычно связана с номерами, разделяющими их.

Файлы D3D9_ [число], которые не являются частью D3DX, следуют одной и той же системе (и, вероятно, имеют одинаковое отношение версии SDK к номеру) и аналогичным образом предоставляют специфичные для версии функции.

Это не значит, что d3d9.dll не используется; огромное количество программного обеспечения использует этот файл (на самом деле, я лично не видел приложение D3D9, которое этого не делало). Связывание с D3D9.dll и передача версии SDK является правильным и рекомендуемым методом использования D3D9. Проверка на это безопасна и надежна, и самый простой способ проверить версию - перехватить вызов на Direct3DCreate9.

...