DirectX多个DLL版本?

时间:2011-09-23 00:06:17

标签: c++ visual-c++ directx c++11 directx-9

我看到DirectX 9有多个DLL版本,比如

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

我想知道差异是什么,以及如何检测它?我一直在使用GetModuleHandle("d3d9.dll");,但如果应用程序有d3d9_43.dll,那么我的代码将检测不到应用程序正在使用DirectX,是吗?如果不对所有DLL版本进行硬编码,我将如何检测它?

1 个答案:

答案 0 :(得分:3)

如果代码使用D3D9,它将始终使用d3d9.dll。通常,这是在导入表中,但它可以动态链接(LoadLibrary)。 d3d9.dll提供D3D的初始化代码(以及需要时的COM),并导出Direct3DCreate9以创建新的IDirect3D9Object

d3d9.dll使用,无论版本是什么,通过将D3D_SDK_VERSION传递给Direct3DCreate9作为唯一参数来指定版本。这表明应该使用什么版本,而不是任何DLL名称。

最常见的编号文件是D3D X 文件。这些都是版本化的,_43引用了2010年6月的SDK(我相信每个SDK版本都有一个)。如果程序需要D3DX中提供的帮助程序功能,则SDK中的最新版本通常会链接,并且数字会保持不变。

不属于D3DX的D3D9_ [number]文件遵循相同的系统(并且可能具有相同的SDK版本与数字关系),并且类似地提供版本特定的功能。

这并不是说d3d9.dll未被使用;绝大多数软件都使用该文件(事实上,我个人并未亲眼见过没有的D3D9应用程序)。链接D3D9.dll并传递SDK版本是使用D3D9的正确和推荐的方法。对其进行测试是安全可靠的,检查版本的最简单方法是拦截对Direct3DCreate9的调用。