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并手动调用这些函数,这是一种更安全的选择,同时可以选择一种更好的错误消息,但它需要做很多工作。     

要回复问题请先登录注册