Fix failure to load DLL with unicode path

- Change LoadLibrary API to unicode version on Windows
This commit is contained in:
Younguk Kim 2017-08-22 23:42:42 +09:00
parent 3e6dc3b046
commit 99cf21acec

View File

@ -47,20 +47,20 @@ load_dso(const DSearchPath &path, const Filename &filename) {
if (!abspath.is_regular_file()) {
return NULL;
}
string os_specific = abspath.to_os_specific();
wstring os_specific_w = abspath.to_os_specific_w();
// Try using LoadLibraryEx, if possible.
typedef HMODULE (WINAPI *tLoadLibraryEx)(LPCTSTR, HANDLE, DWORD);
typedef HMODULE (WINAPI *tLoadLibraryEx)(LPCWSTR, HANDLE, DWORD);
tLoadLibraryEx pLoadLibraryEx;
HINSTANCE hLib = LoadLibrary("kernel32.dll");
if (hLib) {
pLoadLibraryEx = (tLoadLibraryEx)GetProcAddress(hLib, "LoadLibraryExA");
pLoadLibraryEx = (tLoadLibraryEx)GetProcAddress(hLib, "LoadLibraryExW");
if (pLoadLibraryEx) {
return pLoadLibraryEx(os_specific.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
return pLoadLibraryEx(os_specific_w.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
}
}
return LoadLibrary(os_specific.c_str());
return LoadLibraryW(os_specific_w.c_str());
}
bool