Merge pull request #96235 from bruvzg/win_open_dll

[Windows] Fix OS.open_dynamic_library
This commit is contained in:
Rémi Verschelde 2024-08-28 19:54:51 +02:00 committed by GitHub
commit 40b378e9e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 6 deletions

View File

@ -260,7 +260,7 @@ bool get_dotnet_self_registered_dir(String &r_dotnet_root) {
return false; return false;
} }
r_dotnet_root = String::utf16((const char16_t *)buffer.ptr()); r_dotnet_root = String::utf16((const char16_t *)buffer.ptr()).replace("\\", "/");
RegCloseKey(hkey); RegCloseKey(hkey);
return true; return true;
#else #else

View File

@ -430,13 +430,13 @@ Error OS_Windows::open_dynamic_library(const String &p_path, void *&p_library_ha
bool has_dll_directory_api = ((add_dll_directory != nullptr) && (remove_dll_directory != nullptr)); bool has_dll_directory_api = ((add_dll_directory != nullptr) && (remove_dll_directory != nullptr));
DLL_DIRECTORY_COOKIE cookie = nullptr; DLL_DIRECTORY_COOKIE cookie = nullptr;
String dll_dir = ProjectSettings::get_singleton()->globalize_path(load_path.get_base_dir()); String dll_path = fix_path(load_path);
String wpath = fix_path(dll_dir); String dll_dir = fix_path(ProjectSettings::get_singleton()->globalize_path(load_path.get_base_dir()));
if (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) { if (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) {
cookie = add_dll_directory((LPCWSTR)(wpath.get_base_dir().utf16().get_data())); cookie = add_dll_directory((LPCWSTR)(dll_dir.utf16().get_data()));
} }
p_library_handle = (void *)LoadLibraryExW((LPCWSTR)(wpath.utf16().get_data()), nullptr, (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) ? LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0); p_library_handle = (void *)LoadLibraryExW((LPCWSTR)(dll_path.utf16().get_data()), nullptr, (p_data != nullptr && p_data->also_set_library_path && has_dll_directory_api) ? LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0);
if (!p_library_handle) { if (!p_library_handle) {
if (p_data != nullptr && p_data->generate_temp_files) { if (p_data != nullptr && p_data->generate_temp_files) {
DirAccess::remove_absolute(load_path); DirAccess::remove_absolute(load_path);
@ -447,7 +447,7 @@ Error OS_Windows::open_dynamic_library(const String &p_path, void *&p_library_ha
HashSet<String> checked_libs; HashSet<String> checked_libs;
HashSet<String> missing_libs; HashSet<String> missing_libs;
debug_dynamic_library_check_dependencies(wpath, checked_libs, missing_libs); debug_dynamic_library_check_dependencies(dll_path, checked_libs, missing_libs);
if (!missing_libs.is_empty()) { if (!missing_libs.is_empty()) {
String missing; String missing;
for (const String &E : missing_libs) { for (const String &E : missing_libs) {