1

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

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

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

4

1 回答 1

3

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

d3d9.dll无论版本如何,都使用版本,通过传递D3D_SDK_VERSIONtoDirect3DCreate9作为唯一参数来指定版本。这表明应该使用哪个版本,而不是任何 DLL 名称。

最常见的编号文件是 D3D X文件。这些是版本化的,_43 指的是 2010 年 6 月的 SDK(我相信每个 SDK 版本都有一个)。如果程序需要 D3DX 中提供的帮助函数,通常会链接到 SDK 的最新版本,并用数字将它们分开。

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

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

于 2011-09-23T00:49:49.840 回答