Fix:Core:Better win32 module loading
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Sat, 9 Jan 2010 23:04:08 +0000 (23:04 +0000)
committerHenning Heinold <heinold@inf.fu-berlin.de>
Thu, 4 Feb 2010 23:44:44 +0000 (00:44 +0100)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk/navit@2903 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/plugin.c

index cc7011b..3080ba2 100644 (file)
@@ -51,6 +51,9 @@ g_module_supported(void)
 
 #ifdef HAVE_API_WIN32_BASE
 
+static DWORD last_error;
+static char errormsg[64];
+
 static void *
 g_module_open(char *name, int flags)
 {
@@ -59,29 +62,33 @@ g_module_open(char *name, int flags)
        wchar_t filename[len];
        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, filename, len) ;
 
-       dbg(0,"%s\n",name);
        handle = LoadLibraryW (filename);
-       dbg(0,"handle=%p\n",handle);
-       dbg(0,"%d\n",GetLastError ());
+       if (!handle)
+               last_error=GetLastError();
        return handle;
 }
 
 static char *
 g_module_error(void)
 {
-       return NULL;
+       sprintf(errormsg,"dll error %d",(int)last_error);
+       return errormsg;
 }
 
 static int
 g_module_symbol(GModule *handle, char *symbol, gpointer *addr)
 {
        *addr=GetProcAddress ((HANDLE)handle, symbol);
-       return (*addr != NULL);
+       if (*addr)
+               return 1;
+       last_error=GetLastError();
+       return 0;
 }
 
 static void
 g_module_close(GModule *handle)
 {
+       FreeLibrary((HANDLE)handle);
 }
 
 #else