我看到 DirectX 9 有多个 DLL 版本,比如
- d3d9.dll
- d3d9_25.dll
- d3d9_42.dll
- d3d9_43.dll
我想知道有什么区别,以及如何检测到它?我一直在使用GetModuleHandle("d3d9.dll");
,但如果应用程序有d3d9_43.dll
,那么我的代码不会检测到应用程序正在使用 DirectX,对吗?如果不对所有 DLL 版本进行硬编码,我将如何检测它?
我看到 DirectX 9 有多个 DLL 版本,比如
我想知道有什么区别,以及如何检测到它?我一直在使用GetModuleHandle("d3d9.dll");
,但如果应用程序有d3d9_43.dll
,那么我的代码不会检测到应用程序正在使用 DirectX,对吗?如果不对所有 DLL 版本进行硬编码,我将如何检测它?
如果代码使用 D3D9,它总是会d3d9.dll
在某个时候使用。通常这是在导入表中,但可以动态链接 ( LoadLibrary
)。d3d9.dll
为 D3D(和 COM,在需要时)提供初始化代码,并导出Direct3DCreate9
以创建新的IDirect3D9Object
.
d3d9.dll
无论版本如何,都使用版本,通过传递D3D_SDK_VERSION
toDirect3DCreate9
作为唯一参数来指定版本。这表明应该使用哪个版本,而不是任何 DLL 名称。
最常见的编号文件是 D3D X文件。这些是版本化的,_43 指的是 2010 年 6 月的 SDK(我相信每个 SDK 版本都有一个)。如果程序需要 D3DX 中提供的帮助函数,通常会链接到 SDK 的最新版本,并用数字将它们分开。
不属于 D3DX 的 D3D9_[number] 文件遵循相同的系统(并且可能具有相同的 SDK 版本与编号关系)并且类似地提供特定于版本的功能。
这不是说不d3d9.dll
使用;绝大多数软件都使用该文件(事实上,我个人还没有见过没有使用该文件的 D3D9 应用程序)。链接 D3D9.dll 并传递 SDK 版本是使用 D3D9 的正确且推荐的方法。对其进行测试是安全可靠的,检查版本最简单的方法是拦截对Direct3DCreate9
.