]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
call SetDllDirectory on Win32 too
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 27 May 2011 16:58:46 +0000 (16:58 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 27 May 2011 16:58:46 +0000 (16:58 +0000)
Usage: put DLLs in a bin32/ subdir for that
If not done, binaries work as before.

This is the only way to have a 32bit and 64bit executable version in the same
directory! Otherwise Windows will abort DLL search at the 32bit DLL, which
fails to load into a 64bit process.

NOTE: this requires WinXP SP1 and above. To compile with this functionality
disabled, compile with -DDONT_USE_SETDLLDIRECTORY added to the CFLAGS.

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11168 d7cf8633-e32d-0410-b094-e92efae38249

sys_shared.c

index 4ed624e461afa78057d462689d0e0dde7c04f85a..298de87d385349cb93c0432d159c78952b0aced1 100644 (file)
@@ -1,14 +1,14 @@
+#ifdef WIN32
+# ifndef DONT_USE_SETDLLDIRECTORY
+#  define _WIN32_WINNT 0x0502
+# endif
+#endif
+
 #include "quakedef.h"
 
 #define SUPPORTDLL
 
 #ifdef WIN32
-# ifdef _WIN64
-#  ifndef _WIN32_WINNT
-#   define _WIN32_WINNT 0x0502
-#  endif
-   // for SetDllDirectory
-# endif
 # include <windows.h>
 # include <mmsystem.h> // timeGetTime
 # include <time.h> // localtime
@@ -133,13 +133,15 @@ notfound:
        {
                Con_DPrintf (" \"%s\"", dllnames[i]);
 #ifdef WIN32
-# ifdef _WIN64
+# ifndef DONT_USE_SETDLLDIRECTORY
+#  ifdef _WIN64
                SetDllDirectory("bin64");
+#  else
+               SetDllDirectory("bin32");
+#  endif
 # endif
                dllhandle = LoadLibrary (dllnames[i]);
-# ifdef _WIN64
-               SetDllDirectory(NULL);
-# endif
+               // no need to unset this - we want ALL dlls to be loaded from there, anyway
 #else
                dllhandle = dlopen (dllnames[i], RTLD_LAZY | RTLD_GLOBAL);
 #endif