My computer game uses DirectX. However, many users are often complaining and asking for d3dx_39.dll. I thought it is a part of DirectX package, but is it really? So many people don't have the file, although most people should have DirectX installed. Can anyone explain, why most people do not have it, although they have DirectX installed.
I thought to just include the file to my installer package, but I thought it was against the DirectX license. Or is it allowed?
I've seen games do it, and I certainly wouldn't think twice about it. However, you could just include the newest DirectX redist installer (web is small, full is 100mb). You could also rollback your DirectX version and link against that, I would imagine, even though that doesn't seem like a good idea. :D
Originally Posted by moment
Before you release your game you might want to check it in VirtualBox to double-check dependency issues.
I'm yet to find a game that did that to me...
But lets open the window, shall we. The thread smells: ;)
From a cursory look at google, it seems games that do that are hacked games installed through custom packers. DirectX games don't ship that can't access DirectX. It would not make much sense, would it?
... and I suggest, the General Discussions for this thread.
I'll stop you right there Mario. This is a legitimate technical issue. Of course it makes sense. You make a game, and you dynamically link against the DirectX DLL in your system folder. Now when you distribute your game, it looks for that same DLL in your game folder, and then in your system folder. The options are
Originally Posted by Mario F.
1) Static link (not an option with DirectX).
2) Deploy DirectX installer with your game.. which is what newer games do since the 100mb is nothing to them when they use up 5gb DVD discs. That's probably what you found on Google, pirated games. Which makes sense because they might be repacked WITHOUT DirectX included to reduce size for downloading. Then noobs complain about not having the DLL. You can put it right in your setup process. Most games do.
3) State it as a prerequisite and provide a download link. You see that a lot on Asian MMO download pages.
4) Include the dependencies with your game. I don't know if it's against the EULA or not. I would include the installer anyway since it COULD provide other required files and since people SHOULD stay up to date.
Oh, and yes, I have gotten this exact error because I switch between Linux and Windows a lot, as well as run Windows in a VM on multiple systems, and each time I have to upgrade DirectX or I get that error or a custom error. I actually got that exact one because I didn't have the latest August redist, I had April or something. Lame. :D
I'll take your word for it. Especially because my understanding of DirectX programming and of the library is next to null. But damn me if that makes any sense at all. I didn't know DirectX suffered from DLL hell to this day.
In any case my apologies also to the OP. I skimmed your post and didn't realize you were asking about a game of your own doing. Not a generic question about gamers. When I hit the dll name on google... I was gifted with a host of warez related information.
Mario actually does have a valid point. If the OP was developing their own game this error would surely have cropped up at an earlier time or they would know how to deal with it since a simple trek over to gamedev or even gamasutra or MSDN explain in great detail what is happening. So it does sound suspicious to me as well but it does not mean it is definitely a hacked game.
It is against the EULA to distribute the debug versions of D3DX - namely the d3dx<#>_<##>d.dll's. For d3d9 i thought the most recent one was d3dx9_35.dll but I could be wrong. I'm also quite positive that d3dx_39 is not a valid DLL name. Normally they include the version of DX they are compatible with.
However if you provide the perfectly legal redist's for your game and they are the same redist's you developed under this will not be a problem. Seems to me you have a version mismatch IE: the host computer does not have the same D3D version as the computer(s) the game was developed on. If you create a setup and deployment project you can have it call out to the dxsetup.exe to run the DirectX setup program from the distribution you provide. Games do this all the time. DirectX is smart enough that it will not overwrite a newer version with an older version.
Easiest way to check the issue is for the dev computer to run dxdiag and the host computer to run it. All the information you will ever need is right there in front of you. If not, since dxdiag usually does not show d3dx9_35 or any variant thereof you can check in Windows/System32 and see if the DLL is there. As an alternate route you can also place the d3dx dll in the same folder as the executable and the game will run. Windows XP by default checks the local folder first for the DLL where the exe resides and then looks in System32. If it cannot find it then you will get a message box stating the problem.
If it would be a hacked game I would not bother with license regulations anyway.
One would think you have run into this issue before. It is quite common in the development process for D3D before you have a good build that includes the redist's with it. We did not say your game was hacked and keep in mind the type of questions we get constantly about not having this file, that file, etc., etc. that definitely are due to hacking.
If you follow the advice I gave you your program should work. Also keep in mind that if you built this with MSVC 2005 or later you must install the runtimes for those. The setup and deployment process will dependency walk your code and include them with the final package. The reason for this is b/c MSVC 6 and earlier linked to MSVCRT.DLL in the System32 folder. B/C Microsoft knew more versions would be made and b/c having to constantly update one DLL that every C/C++ program in the system used they decided to place them in the WinSXS or assemblies folder for XP. The assembly folder name exactly matches the name in your manifest file and if you open this folder up you will see the DLLs. This allows for much better version control and happens per EXE since each now contains a manifest.
If you get a side by side error on the host computer it is saying it cannot find the DLL specified in the manifest.
Mario has a point the OP is suspicious and probably hacking, but we did not say his game was hacked. It's one way or the other, Bubba.
The most recent one is 42, 39 was a year ago. They updated DX9 it in that new redist I figured was only for DX11.
Not necessarily. Looking at the OP's other posts you can tell he's jumping into it, getting quick results. You've been developing for years and years. Nowadays, like when you jump into XNA, or Irrlicht + Irrnet + Irrklang + whatever else, this stuff happens. I did it for a little while, and ran into all sorts of Windows errors. I'd move my binaries over to my friends/parents computer, give it a run, depending on the SP version, the DX version, the .NET version, the compile settings (optimization -O), often it wouldn't even work. The worst one is when you develop on SP3 and switch to like SP1 and you get the most generic error with no information at all. I'm better equiped to deal with those errors now, but I didn't magically find information on gamedev, gamasutra. Actually, the best place was MSDN forums.
Originally Posted by Bubba
Running to the forums for a DX error that obviously requires upgrade is kind of premature, I'll agree, but nothing out of the ordinary on these forums. ;)