今天在学习DirectX 9 SDK的时候,碰到了一个问题,提示我:
This application has failed to start because d3dx9_25.dll was not found.
上网查了下,找到了原因,英文就不翻译了,再也找不到英文比我还烂的人了 ^_^:
There have been issues with DirectX since the February 2005 update relating to the D3DX dll library files. You can no longer distributes apps without the DirectX runtime and expect them to work.
Windows
XP users who keep their machines up to date should all have DirectX
9.0c installed but not the D3DX dlls so will get errors about missing
d3dx9_xx.dll (where xx is from 24 for the February 2005 update to the
latest - see below). In addition XINPUT dlls may be missing (this is
the Xbox controller system). Unfortunately the end user is not
automatically downloading the new dlls. The best solution is to
distribute the DirectX runtime with your app. however if you are
providing your app. as a download this could increase its size. From
the June 2005 release Microsoft solved these problems somewhat by
allowing the developer to create a minimal installer that just updates
the D3DX
dll. You could also of course just include the dll. although this is
against the agreement (EULA). Another solution is to forward users to
the Microsoft DirectX end user runtime download.
Download the missing DLLs
Note: these
installers will not install DirectX 9.0c, they will only install the
missing dlls from the SDK updates. Most people should have DirectX 9.0c
as part of Windows XP SP2 but if you do not you can get it here: DirectX 9.0c. You can also use the online Microsoft update page here: Microsoft Web Installer
Name
|
Installs D3DX DLL
|
Download sites
|
D3DX February 2005 Update
|
d3dx9_24.dll
|
shdon, gamedev ,threelights
|
D3DX April 2005 Update
|
d3dx9_25.dll
|
shdon, gamedev ,threelights
|
D3DX June 2005 Update
|
d3dx9_26.dll
|
shdon, gamedev ,threelights
|
D3DX August 2005 Update
|
d3dx9_27.dll
|
shdon, gamedev ,threelights
|
D3DX October 2005 Update
|
No change
|
|
D3DX December 2005 Update
|
d3dx9_28.dll
|
shdon,threelights
|
D3DX February 2006 Update
|
d3dx9_29.dll
|
shdon,threelights
|
D3DX April 2006 Update
|
d3dx9_30.dll xinput1_1.dll
|
threelights
|
D3DX June 2006 Update
|
No change
|
threelights
|
D3DX August 2006 Update
|
xinput1_2.dll
|
threelights
|
D3DX October 2006 Update
|
d3dx9_31.dll xinput1_3.dll
|
threelights
|
D3DX December 2006 Update
|
d3dx9_32.dll
|
threelights
|
D3DX February 2007 Update
|
No change
|
threelights
|
D3DX April 2007 Update
|
d3dx9_33.dll
|
Microsoft Web Installer
|
|
Matthias Langer of ThreeLights has kindly combined the downloads into one making it very easy to install. See his site to download.
Note: if you are missing d3dx9d_xx.dll files
e.g. d3dx9d_29.dll these files are debug versions of the libraries for
development purposes only. Nobody should be distributing these in an
application. To use these you need the full DirectX SDK.
The xinput dlls are for the Microsoft common controller library and are used for things like the Xbox 360 common controller
===================================================================================
这个站点就可以直接下载相关的DLL,上面列出的链接应该也可以,不过我没有一个个去试。
http://www.shdon.com/view?doc=d3dx
DirectX D3DX DLLs
In previous versions of the DirectX SDK, D3DX was statically linked.
Current version use a DLL instead. Unfortunately, with each minor
update of the SDK, a new version of this DLL was created. Many people
find they cannot run simple programs they download from the net because
they miss a file such as D3DX9_25.DLL.
Fortunately GameDev.net forum member Keith Ditchburn (Trip99) has
created installers for these files. To help him out with the bandwidth
requirements, I've mirrored the files below. Please download just the
file you need.
===================================================================================
这篇文章也谈到了这个问题,所谓windows DLL地狱。
DirectX Updates - DLL Hell Revisited
Have you tried playing a new DirectX game lately only to have the game complain that it can't find weird files like
d3dx9_25.dll, or crash because it can't find an assembly like
Microsoft.DirectX.AudioVideoPlayback? I have, and it's taken me a while to figure out what was going on, and how to fix the problem.
First
off, if you're experiencing such a problem right now, you probably want
to fix it and get on with your game. If you're looking for
d3dx9_24.dll,
d3dx9_25.dll,
d3dx9_26.dll, or
d3dx9_27.dll, just download the appropriate mini-installer
right here.
If you need the DirectX for Managed Code extensions (necessary for
.NET-based programs that use DirectX), you can download my own
mini-installer
right here.
So
here's what's going on. If you have Windows XP Service Pack 2
installed, you already have Microsoft's latest version of DirectX
(9.0c) installed as well. You can verify this by clicking
Start Run, entering
dxdiag.exe, and clicking
OK.
When the DirectX Diagnostic Tool loads, you should see the current
version listed next to "DirectX Version." Many games install DirectX as
well, and you can even
download it on your own.
The thing is, Microsoft has produced numerous updates to DirectX 9.0c,
whose files are not included in the 9.0c distribution, and aren't
obviously available for download from Microsoft's site. You
can get them indirectly by downloading the developer versions of the 34-megabyte DirectX redistributable file. (Go to
Microsoft Download Center and search for "directx redistributable for developers".)
Game
developers are also supposed to include these files in their game
installers. But if you Google for some recent games (say, Black &
White 2 or Battlefield 2) and d3dx9_25.dll, you'll find that this isn't
quite working out. Back in the early days of Windows, tech support
people and developers complained of "DLL Hell," a state of utter
confusion that existed when Microsoft didn't tightly control how its
own redistributable files were installed and upgraded. Old versions
trampled over new ones, duplicate non-mixing versions got scattered all
over the hard drive, programs that once worked ceased working after new
software was installed- it was truly terrible. Beginning with Windows
98, Microsoft added "Windows File Protection" to their operating
systems to protect important system files from getting trampled. They
also tightened down their software logo certification requirements and
required that their redistributable files ONLY be installed using their
own installers (developers could no longer randomly include
Microsoft-authored components in their own installers). This was a very
good thing and ended up making Windows software much more reliable in
the long run.
So, what in THE HELL was Microsoft thinking when
they started releasing parts of DirectX piecemeal and not updating the
runtime available to consumers? It's just freaking insane! Do you know
what most gamers who've encountered these problems have been doing?
They've been going to web sites and P2P sharing networks and
downloading these files individually. This is dangerous for a couple of
reasons: First, these files are scattered all over the Internet and
some of them have some dependencies. If you just grab one file at a
time, there's no telling how stable your DirectX games that use them
are going to be. Second, if you're downloading the files from some
random site or P2P network and just dropping them onto your hard drive,
you have no way of knowing that the files haven't been hacked or
compromised- or are outright fakes. These are some of the things
Microsoft meant to avoid by instituting rules about how their files are
deployed and they have regressed to a state where users are potentially
screwing up their systems again, likely causing both Microsoft and game
publishers time and money in technical support calls. Good one!
Why
can't they update the DirectX web installer to check for any of the new
DirectX components and just install those? (The web installer and even
the
single-file DirectX redistributable
haven't been updated since August of 2004.) If nothing else, why can't
Microsoft just up-level the DirectX version when they release a new
update? (I mean these new files all require DirectX 9.0c to be
installed anyway- they're not standalone additions.) Why can't they
just call it 9.0d, e, f, etc. and update the downloads accordingly?
Anyway,
as mentioned earlier in this post, I did my own installer for DirectX
for Managed Code, and I also pointed to mini-installers for the D3DX
DLLs. These aren't rogue piecemeal installs; they all use Microsoft's
DirectX setup program and the appropriate files from the SDK
redistributables, and are the only correct/safe way to obtain these
files if you didn't get them when you installed your game. All of them
require that you already have DirectX 9.0c installed.
If you'd like to know how I made my installer, here's the scoop. I read the article
Installing DirectX with DirectSetup
at MSDN and installed the latest DirectX SDK (I have an MSDN
subscription... I don't think you can download the SDK without one) and
looked in the
Redist folder. Well the article states
that you can create a mini-distribution by taking the following files
from Redist and placing them into the same folder:
dxsetup.exe,
dsetup32.dll,
dsetup.dll,
dxupdate.cab,
and the CAB file of the component you want to install. For example, I
needed Oct2005_MDX_x86.cab, for the Managed Code stuff. However, that's
not necessarily all. Look inside the cab file and check the enclosed
INF file (oct2005_mdx_x86.inf in this case) and see if there are any
"Dependencies" entries. You'll have to include any CABs listed here in
order for your mini installer to work. To make my redistributable a
standalone installer, I used Ace Zip to create a self-extracting
archive, and instructed Ace Zip to launch Dxsetup.exe once the files
were unzipped. Ace Zip has quite possibly the worst UI I've ever seen,
but it works. Also, before you
visit the Ace Zip site please be aware that some of the banner ads there are pornographic.