summaryrefslogtreecommitdiff
path: root/libpurple/win32/win32dep.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/win32/win32dep.c')
-rw-r--r--libpurple/win32/win32dep.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libpurple/win32/win32dep.c b/libpurple/win32/win32dep.c
index d2740dc15f..2c2824f744 100644
--- a/libpurple/win32/win32dep.c
+++ b/libpurple/win32/win32dep.c
@@ -35,7 +35,7 @@
static char *app_data_dir = NULL, *install_dir = NULL,
*lib_dir = NULL, *locale_dir = NULL;
-static HINSTANCE libpurpledll_hInstance = 0;
+static HINSTANCE libpurpledll_hInstance = NULL;
/*
* PUBLIC CODE
@@ -77,16 +77,23 @@ FARPROC wpurple_find_and_loadproc(const char *dllname, const char *procedure) {
BOOL did_load = FALSE;
FARPROC proc = 0;
- if(!(hmod = GetModuleHandle(dllname))) {
+ wchar_t *wc_dllname = g_utf8_to_utf16(dllname, -1, NULL, NULL, NULL);
+
+ if(!(hmod = GetModuleHandleW(wc_dllname))) {
purple_debug_warning("wpurple", "%s not already loaded; loading it...\n", dllname);
- if(!(hmod = LoadLibrary(dllname))) {
- purple_debug_error("wpurple", "Could not load: %s\n", dllname);
+ if(!(hmod = LoadLibraryW(wc_dllname))) {
+ purple_debug_error("wpurple", "Could not load: %s (%s)\n", dllname,
+ g_win32_error_message(GetLastError()));
+ g_free(wc_dllname);
return NULL;
}
else
did_load = TRUE;
}
+ g_free(wc_dllname);
+ wc_dllname = NULL;
+
if((proc = GetProcAddress(hmod, procedure))) {
purple_debug_info("wpurple", "This version of %s contains %s\n",
dllname, procedure);
@@ -124,7 +131,7 @@ const char *wpurple_install_dir(void) {
if (!initialized) {
char *tmp = NULL;
wchar_t winstall_dir[MAXPATHLEN];
- if (GetModuleFileNameW(NULL, winstall_dir,
+ if (GetModuleFileNameW(libpurpledll_hInstance, winstall_dir,
MAXPATHLEN) > 0) {
tmp = g_utf16_to_utf8(winstall_dir, -1,
NULL, NULL, NULL);