У меня есть приложение .NET, которое вызывает API C ++ с использованием P / Invoke. DLL C ++ зависит от сторонних библиотек DLL. Эта dll третьей стороны вызывает LoadLibrary
для динамической загрузки libeay32.dll, зависимости OpenSSL.
После нескольких тестов я обнаружил, что приложение .NET правильно работает в Windows 10, но не работает в некоторых развертываниях с использованием Windows 7. Причина сбоя заключается в том, что процесс .NET не загружает libeay32.dll. Я попытался поместить libeay32.dll в тот же каталог, что и процесс, и в системную папку (имея в виду порядок поиска с динамической загрузкой), но ошибка сохранилась только в 32-разрядной версии Windows 7. Кроме того, если бы я вызывал dll API из консольного приложения C ++, это работало без проблем на всех платформах. Чтобы решить эту проблему, я вызвал LoadLibrary
в приложении .NET, прежде чем вызывать P / Invoke для API C ++, и он работал на всех целевых платформах (Windows 10/7 32 и 64 бит).
Почему бы LoadLibrary
не удалось загрузить libeay32.dll в Windows 7, но не в Windows 10, если она вызывается из зависимости Cll DLL API, вызываемой с помощью P / Invoke?
Редактировать
Некоторые заметки из комментариев:
- Все скомпилированные сборки предназначены для архитектуры x86.
- Перед публикацией вопроса я проверил, что нет файлов зависимостей
где отсутствует, с помощью обходчика зависимостей.