Мое приложение хранит некоторые данные в файлах только данных. Эти dll-файлы загружаются с помощью LoadLibrary () при необходимости во время выполнения, а затем отбрасываются с помощью FreeLibrary () после того, как их используют fini sh. Основное приложение обращается к данным, хранящимся в файлах DLL, используя GetProcAddress (). Программа написана на C ++ и использует вызовы WinAPI, без MF C или других библиотек. Имеет две версии x64 и x86. Он отлично работает на большинстве систем. Мои DLL-файлы не вызывают другие библиотеки или зависят от чего-либо еще. Каждый из них является отдельным файлом.
Недавно я обнаружил, что программа не работает на одном компьютере. этот спецификатор c один имеет Windows 10 x64 установлен на нем. После исследований я обнаружил следующее:
Ошибка LoadLibrary () с сообщением об ошибке «Не удалось найти модуль». DLL находится в том же каталоге, что и основная программа.
Я заменил вызов LoadLibrary () на LoadLibraryEx () и попробовал следующие ошибки:
- LOAD_IGNORE_CODE_AUTHZ_LEVEL не сработало. DLL не может быть загружен.
- DONT_RESOLVE_DLL_REFERENCES ... работает ?? Но Microsoft настоятельно рекомендует не использовать его.
- LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE ... загрузка DLL успешна ?? Но позже вызов GetProcessAddress не удался. Программа не может получить доступ к данным в файле DLL. Так что на самом деле это не работает.
Я не смог найти ничего плохого в этой машине. Все остальные программы работают нормально.
Я попробовал версию x86 на этом компьютере, и она работала нормально, используя оригинальный LoadLibrary ().
My Установщик является двойной системой и автоматически устанавливает версию x64, когда находит x64 windows. Обычный пользователь не может просто переключиться на x86, когда он получает такую ошибку.
Мой вопрос: как я могу устранить эту ошибку и заставить мою программу работать на любой машине:
- Должен ли я вызывать LoadLibraryEx () с использованием флага DONT_RESOLVE_DLL_REFERENCES и игнорировать предупреждение Microsoft?
- Можно ли как-нибудь загрузить свою библиотеку простым вызовом LoadLibrary ()?
- Если я вызываю LoadLibraryEx () с флагом LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, как рекомендовано Microsoft, как я могу получить доступ к данные без вызова GetProcessAddress ()?
Заранее спасибо.