2011-05-24 50 views
1

如果我建我的应用程序对D3DX June2007_d3dx9_34和目标系统具有版本Nov2007_d3dx9_36应该说是一个问题吗?是否D3D9应用程序依赖于精确D3DX DLL版本?

我分配使用MS D3DX的DLL” REDIST,安装工具,但我注意到一个一个‘干净’PC(没有以前安装的D3DX)我得到一个错误失踪D3DX的DLL。想弄清楚,如果本身不工作的安装程序,我想知道,如果可能供应DLL的太新版本的问题之前 - 将应用程式中寻找具有确切名称的DLL?

回答

1

D3DX库不向后兼容,以及API可以版本之间切换。因此,目标系统必须具有与构建应用程序相同版本的D3DX - 新版本不起作用。

如果您在申请使用Dependency Walker,它应该告诉你,有与确切的版本号的DLL的依赖。

0

在DirectX SDK可再发行包括D3DX的DLL的全部历史。安装最新版本的DirectX可再发行组件应该让您的系统以这些dll的每个版本结束。这是可能的,允许应用程序只安装他们通过删除CAB文件出了可再发行的目录结构的需要的文件,以减少可再发行组件的尺寸,这是你如何可以与具有DLL的43结束了但不是37例如。

如果删除D3DX和D3DCOMPILER的dll的依赖关系,从您的应用程序,你可以确保应用程序将工作作为D3D9 D3D10和D3D11核心的DLL版本无关,也被捆绑到Windows Service Pack版本(即D3D11的Vista来自Vista SP2或Win7股票安装例如)。

另一种可能的方式来去除依赖,并让应用程序启动是使DLL延迟加载模块,所以需要(如在开发环境中编译着色器)时,它才加载。只要你确定在最终用户机器上存在的着色器正确就不会需要编译着色器,并不会崩溃。调用LoadLibrary和手动调用的功能将与您所选择的方式更好的错误消息的更安全的选择,但很多工作。

相关问题