So, The error I currently get is

object.Exception@generated\gtkd\gtkd\Loader.d(125): Library load failed (libgdk-3-0x64.dll): is not a valid Win32 application.

and libgdk-3-0x64.dll was libgdk-3-0.dll from the 64-bit gtk package. (I simply added the extension)... the package downloaded from the gdk website.

The size of the file is

1.15 MB (1,211,571 bytes)


What's strange is that the file says the original name was libgdk-win32-3.0-0.dll..

This is from the supposedly 64-bit package on the gdk website: gtk3-runtime_3.22.4_64-bit

I extracted the files directly from that to compare and that is what it says... so, if the dll is truly 32-bit then it would explain it and the 64-bit runtime is not correct.

Trying the files from http://www.tarnyko.net/dl/gtk.htm still has the same name(maybe the name is not correct... but still doesn't work).


I've uninstalled all the gtk stuff and reinstalled using that website(seems to be a later version?).

Eventually after setting the paths and all that I run the program and get a different error: (note the the spelling error)

object.Error@(0): The function you are calling is not pressent in your version of GTK+.
----------------
0x00007FF7DBE8A033 in extern (C) void gtkd.Loader.Linker.unsupportedSymbol() 0x00007FF7DBAC28BB in gtk.Builder.Builder gtk.Builder.Builder.__ctor(immutable(char)[])
0x00007FF7DBAC145A in D main at main.d(17)
0x00007FF7DBEF0172 in D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv 0x00007FF7DBEF007F in void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) 0x00007FF7DBEF010C in void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll() 0x00007FF7DBEF007F in void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())
0x00007FF7DBEEFF9F in d_run_main
0x00007FF7DBAC1502 in __entrypoint.main
0x00007FF7DBF6B654 in invoke_main at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(65) 0x00007FF7DBF6B567 in __scrt_common_main_seh at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(259) 0x00007FF7DBF6B42E in __scrt_common_main at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(302) 0x00007FF7DBF6B669 in mainCRTStartup at f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp(17)
0x00007FFB8EBD2774 in BaseThreadInitThunk
0x00007FFB90050D51 in RtlUserThreadStart


now trying the the gtkd's gtk64.

woot! which works!

So, the problem is simple(but unfortunately a lot of wasted time). gtkD needs to be updated to work well with x64 and x86. I think all one has to do is be able to specify which path of gtk to use rather than have it search the windows path.

While I could manually rename the dirs or create a script that does so, that seems harsh. It would be nice if we could simply set a path in D that gtkD attempts to use as a base path to load the dlls.

That way, we can completely avoid windows path if necessary and simply use d's version to set the correct path to the correct dlls.

(or modified gtkD to work properly with both versions installed instead of crapping out on the first instance of the dll it comes across if it is not correct... I'd actually prefer both ways implemented though so gtkD works better on the end user's end but I have more control when developing).


Reply via email to