1

如果我针对 D3DX June2007_d3dx9_34 构建我的应用程序并且目标系统具有更新的版本 Nov2007_d3dx9_36 这应该是个问题吗?

我使用 MS 的 redist-installer 工具分发 D3DX DLL,但我注意到一台“干净”的 PC(以前没有安装 D3DX)我收到关于缺少 D3DX DLL 的错误。在尝试确定安装程序本身是否无法正常工作之前,我想知道是否可能提供了一个太新版本的 DLL 是问题 - 应用程序会寻找具有确切名称的 DLL 吗?

4

2 回答 2

2

D3DX 库不向后兼容,API 可能会在版本之间发生变化。因此,目标系统必须具有与您构建应用程序相同的 D3DX 版本 - 较新的版本将无法工作。

如果您在应用程序上使用Dependency Walker,它应该会显示对具有确切版本号的 DLL 的依赖。

于 2011-05-24T10:45:04.687 回答
1

DirectX SDK 中的可再发行组件包括 D3DX dll 的整个历史。安装最新版本的 DirectX 可再发行组件应该让您的系统最终获得这些 dll 的每个版本。可以并且允许应用程序仅通过从可再发行组件的目录结构中删除 cab 文件来安装它们需要的文件,以减小可再发行组件的大小,这就是您最终拥有 43 个 dll 的方式但不是 37 例如。

如果您从应用程序中删除 D3DX 和 D3DCOMPILER dll 的依赖关系,您可以确保应用程序能够正常工作,因为 d3d9 d3d10 和 d3d11 核心 dll 与版本无关,并且还与 Windows 服务包版本相关联(即适用于 Vista 的 D3D11 来自 Vista例如 SP2 或 Win7 库存安装)。

另一种去除依赖并让应用程序启动的可能方法是使 dll 成为延迟加载模块,因此它仅在需要时加载(例如在开发环境中编译着色器)。只要您确定最终用户机器上正确存在着色器,它就不需要编译着色器并且不会崩溃。调用 LoadLibrary 并手动调用函数将是一个更安全的选择,您选择的错误消息会更好,但需要做更多的工作。

于 2011-07-06T08:33:10.197 回答