diff options
Diffstat (limited to 'dso/win32/dso.c')
-rw-r--r-- | dso/win32/dso.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/dso/win32/dso.c b/dso/win32/dso.c index d4a689387..085470905 100644 --- a/dso/win32/dso.c +++ b/dso/win32/dso.c @@ -77,8 +77,24 @@ APR_DECLARE(apr_status_t) apr_dso_load(struct apr_dso_handle_t **res_handle, os_handle = LoadLibraryExW(wpath, NULL, 0); if (!os_handle) os_handle = LoadLibraryExW(wpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - if (!os_handle) + if (!os_handle) { +#ifndef _WIN32_WCE + apr_wchar_t *ignored; + apr_wchar_t fpath[APR_PATH_MAX]; + rv = apr_get_os_error(); + if (GetFullPathNameW(wpath, sizeof(fpath) / sizeof(apr_wchar_t), fpath, &ignored)) { + if (SetDllDirectoryW(fpath)) { + os_handle = LoadLibraryExW(fpath, NULL, 0); + if (!os_handle) + os_handle = LoadLibraryExW(fpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + if (os_handle) + rv = APR_SUCCESS; + } + } +#else rv = apr_get_os_error(); +#endif + } #ifndef _WIN32_WCE SetErrorMode(em); #endif |