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()) { if (!abspath.is_regular_file()) {
return NULL; return NULL;
} }
string os_specific = abspath.to_os_specific(); wstring os_specific_w = abspath.to_os_specific_w();
// Try using LoadLibraryEx, if possible. // Try using LoadLibraryEx, if possible.
typedef HMODULE (WINAPI *tLoadLibraryEx)(LPCTSTR, HANDLE, DWORD); typedef HMODULE (WINAPI *tLoadLibraryEx)(LPCWSTR, HANDLE, DWORD);
tLoadLibraryEx pLoadLibraryEx; tLoadLibraryEx pLoadLibraryEx;
HINSTANCE hLib = LoadLibrary("kernel32.dll"); HINSTANCE hLib = LoadLibrary("kernel32.dll");
if (hLib) { if (hLib) {
pLoadLibraryEx = (tLoadLibraryEx)GetProcAddress(hLib, "LoadLibraryExA"); pLoadLibraryEx = (tLoadLibraryEx)GetProcAddress(hLib, "LoadLibraryExW");
if (pLoadLibraryEx) { 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 bool