微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

D3D9应用程序是否绑定到确切的D3DX DLL版本?

如何解决D3D9应用程序是否绑定到确切的D3DX DLL版本?

| 如果我针对D3DX June2007_d3dx9_34构建了应用程序,并且目标系统具有较新的版本Nov2007_d3dx9_36,那应该是一个问题吗? 我使用MS的redist-installer工具分发D3DX DLL,但我注意到一台“干净的” PC(以前未安装D3DX),但我收到有关丢失D3DX DLL的错误消息。在尝试确定安装程序本身是否无法运行之前,我想知道是否可能是由于提供了DLL的新版本而引起的-该应用程序是否正在寻找具有确切名称的DLL?     

解决方法

D3DX库不向后兼容,并且API可能会在版本之间更改。因此,目标系统必须具有与构建应用程序时所用版本相同的D3DX-较新的版本将不起作用。 如果在您的应用程序上使用Dependency Walker,它应显示具有确切版本号的DLL依赖项。     ,DirectX SDK中的可再发行内容包括D3DX dll的全部历史记录。安装最新版本的DirectX可再发行文件应该使您的系统使用这些dll的每个版本。为了减少可再分发组件的大小,应用程序可能并允许仅通过从可再分发目录结构中删除cab文件来安装所需文件,以减少可再分发组件的大小,这最终可以使应用程序拥有43个dll,但不是37。 如果您从应用程序中删除了D3DX和D3DCOMPILER dll的依赖项,则可以确保该应用程序可以正常运行,因为d3d9 d3d10和d3d11核心dll与版本无关,并且还与Windows Service Pack发行版相关(例如,用于Vista的D3D11例如来自Vista SP2或Win7库存安装)。 消除依赖关系并让应用启动的另一种可能方式是使dll成为延迟加载模块,因此仅在需要时才加载dll(例如在开发环境中编译着色器)。只要您确定着色器正确存在于最终用户计算机上,就不需要编译着色器并且不会崩溃。一个安全的选择是调用LoadLibrary并手动调用这些函数,这是一种更安全的选择,同时可以选择一种更好的错误消息,但它需要做很多工作。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。