diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2010-01-09 23:04:08 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2010-01-09 23:04:08 +0000 |
commit | 46a8a89197be07a504619aaf8424388eed9c52a6 (patch) | |
tree | ce1fda2849623448fa3777b617fc599d160af383 /navit/plugin.c | |
parent | 29759efebf48ee551b563f97494e2494e14f48ce (diff) | |
download | navit-46a8a89197be07a504619aaf8424388eed9c52a6.tar.gz |
Fix:Core:Better win32 module loading
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@2903 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/plugin.c')
-rw-r--r-- | navit/plugin.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/navit/plugin.c b/navit/plugin.c index cc7011bd8..3080ba22f 100644 --- a/navit/plugin.c +++ b/navit/plugin.c @@ -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 |