[Ohrrpgce] Problem starting gfx_directx

Mike Caron caron.mike at gmail.com
Wed Dec 23 04:38:50 PST 2009


Shit, you replied after I left, and thus I can't link pertinent docs.

Anyway, if DyLibLoad etc aren't working the way I mention, it's because FB is mangling it's wrapper around LoadLibrary or whatever the Win32 function is called.

And, the flag you're talking about is deprecated, and when used is a ticking time bomb. Specifically it will blow up when you try to resolve any symbols in those dependencies!

Google "old new thing DLL DEPENDENCIES" or something like that (no quotes), to find the relevant page on The Old New Thing.

--
Mike Caron

-----Original Message-----
From: Ralph Versteegen <teeemcee at gmail.com>
Date: Thu, 24 Dec 2009 01:30:38 
To: <ohrrpgce at lists.motherhamster.org>
Subject: Re: [Ohrrpgce] Problem starting gfx_directx

2009/12/24 Mike Caron <caron.mike at gmail.com>:
> Ralph Versteegen wrote:
>>
>> 2009/12/23 Jay Tennant <hierandel8 at crazyleafgames.com>:
>>>>
>>>> From: Ralph Versteegen <teeemcee at gmail.com>
>>>> Sent: Tuesday, December 22, 2009 10:35 PM
>>>> 2009/12/23 James Paige <Bob at hamsterrepublic.com>:
>>>>>
>>>>> I was just testing out a windows build with gfx_directx gfx_sdl on a
>>>>> computer with directx 9.0c installed (according to dxdiag). When I run
>>>>> game.exe it says:
>>>>>
>>>>> "This application has failed to start because d3dx9_41.dll was not
>>>>> found. Re-installing the application may fix this problem."
>>>>>
>>>>> When I click okay on it, then game.exe starts up okay falling back on
>>>>> gfx_sdl
>>>>>
>>>>> Any idea why this might happen?
>>>>>
>>>>> ---
>>>>> James Paige
>>>
>>> d3dx9_41.dll is one of many dll's that microsoft has released to patch
>>> the d3dx library. A solution to this would be obtaining the latest dx
>>> runtime on your computer, available at:
>>>
>>> http://www.microsoft.com/downloads/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&displaylang=en
>>>
>>> An alternative would be compiling the backend with static linking the
>>> d3dx library, which was available in the december 2004 dx sdk. This will
>>> remove dependencies, but will increase the dll size by about 500kb.
>>>
>>>> That's interesting, I was under the impression that loading
>>>> gfx_directx.dll would silently fail if its dependencies weren't
>>>> available. Luckily, it's quite simple to check in backends.bas whether
>>>> d3dx9_41.dll (the august 2009, I think, release of the Direct3D 9
>>>> utility library) is present before attempting to load gfx_direct.dll,
>>>> and I was originally planning to do.
>>>
>>> It's present in March 2009. I was trying to manually remove all
>>> dependencies, but got stuck with the screenshot and font algorithms.
>>>
>>> I'll upload a version of gfx_directx that has no dependencies in a few
>>> minutes, though 500kb larger.
>>
>> We ought to have some way to detect whether or not the dll has been
>> statically linked to d3dx9 or not. Would it be possible to set the
>> version number (the one seen in a the file browser) and read it
>> somehow?
>
> I haven't looked at this backend at all, so I don't know if this is already
> done, but the standard way of doing this (on Windows, at least) is something
> like this:
>
> hModule = DyLibLoad("gfx_directx.dll")
> hFunction = DyLibSymbol(hModule,
> "some_function_that_exists_in_d3dx9_41_dll")
>
> if hFunction != 0 then
>  'd3dx9_41.dll is statically linked
> end if
>
> DyLibFree(hModule)
>
> --
> Mike

Well that won't work, because surprisingly windows pops up a message
box when the dependency is missing

However, I saw a winapi function to load a dll without resolving its
dependencies (for the purposes of loading resources), probably that
can be used in the way you described.
_______________________________________________
Ohrrpgce mailing list
ohrrpgce at lists.motherhamster.org
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org


More information about the Ohrrpgce mailing list