DirectX的版本问题

很多人在安装基于DirectX开发的程序,例如游戏时,可能会遇到游戏安装程序报告说系统DirectX版本不够新,无法运行的情况。但实际上,情况可能并非如此。

DirectX是Windows下大部分游戏运行所必需的,而自从发布以来,DirectX已经进行过多次更新。不仅每隔几年有大版本的更新,而且每几个月,可能还有一些小型的更新。虽然高版本的DX运行环境可以兼容使用低版本DX开发的程序,但反过来是不行的。因此很多游戏开发人员会在游戏的安装程序中使用某些机制,检测本机DX的版本。而检测版本所用的方法如果不同,就可能会有背道而驰的结果。

具体现象

在安装某些游戏时,可能会看到一些错误信息,报告在系统中找不到“d3dx9_**.dll”文件,其中“**”是一个两位数。在看到这样的消息后,很多人尝试安装最新版本的DX,但安装完,重启动系统,再次运行游戏的安装程序,依然会遇到错误。

如果您正遇到这样的问题,其实有一个最简单的办法,那就是把报告缺少的dll文件复制到你的Windows目录下,随后就应该可以正常运行了。要想下载缺少的dll文件,可以到一些专门的网站搜索看看,例如在这里(请注意安全)。

如果希望知道造成这个问题的原因是什么,请继续看下去。

作为开发人员,到底如何正确地检查DX版本

对于上文所提到的错误,主要就是由于游戏开发人员使用了D3DXCheckVersion的版本检测方法。虽然微软提供了这种方法,但这个方法并不好,因此建议不要使用。

简单来说,原因是这样的:在微软每次更新DX(无论是大的还是小的更新)时,都会在DX的库文件中放置一个“d3dx*_**.dll”的文件,其中第一个“*”代表的是DX的大版本号,而后面的“**”代表的是小版本号。因此很多开发人员习惯于检查有没有这个文件,来判断用户的DX是否满足要求。其实这个文件对DX的实际功能没有任何意义,仅仅是为了用于证明DX库的版本。那么问题在哪里?

假设有这样的情况:游戏的开发人员使用了一台运行XP的电脑,并且这个系统已经连续使用了三年时间。在这三年内,每次DX发布更新,无论大小,开发人员都会立刻安装。而每次安装后,系统中都会留下一个“d3dx*_**.dll”文件。因此在最终发布文件之前,开发人员会在自己的系统里找这个文件的最新版本。然后在创建游戏的安装程序时,就会让安装程序检查,看用户的系统中是否存在和自己系统中文件名称完全一样的文件。如果有,就表示用户的电脑环境没问题,可以开始安装游戏;但如果没有,则“认为”用户电脑环境不符合要求,拒绝继续安装。

开发人员是这样,那么用户呢?假设某位用户,购买了一台预装Vista的电脑。Vista已经自带DX 10了,按理说完全可以支持使用DX9技术开发的游戏。但是因为用户环境中的DX是内建的DX 10,没有进行任何升级,他的系统中自然不会存在“d3dx*_**.dll”文件。因此,尽管他的系统已经满足游戏要求,但开发人员所用的版本检测方法是毫无意义的,因此也会遇到本文最开头提出的错误。

因此建议游戏开发人员能尽量不要使用D3DXCheckVersion的方法,而是使用微软推荐的DirectXSetupGetVersion方法。

作为最终用户,遇到这个问题后还能怎么办

首先,有些游戏在发布之前,就打包了所需的DX(通常保存在文件名类似“DirectX”的文件夹中),虽然游戏自带的DX版本可能比我们自己电脑中的还要老,不过在遇到此类错误后,直接运行游戏自带的DX安装程序,即可解决问题。这是最简单的方法,而且覆盖安装并不会影响系统的其他功能。

如果游戏本身的安装文件不包含DX,或安装后依然没用,则可以考虑去微软网站下载最新版本的DirectX Redist。因为DX可能会频繁更新,因此这里不直接给出下载链接,请直接到微软下载中心,使用“DirectX Redist”作为关键字进行搜索,然后找发布日期最新的版本来下载和安装即可。

分享:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

发表评论前,先做个简单的数学题吧: * Time limit is exhausted. Please reload CAPTCHA.