Не удалось загрузить библиотеку SSL - dll не найдена
В моей программе Delphi (10.3 Community Edition) я пытаюсь использовать Indy с библиотекой OpenSSL, но получаю сообщение об ошибке
Не удалось загрузить библиотеку SSL
Моя библиотека OpenSSL является версия 1.0.2u и я поставил libeay32.dll
и ssleay32.dll
файлы в моем каталоге программы EXE, и Windows\SYSWOW64
и Windows\System32
.
Я установил Embarcadero Delphi Patch RS1033_Indy_SSL_Patch .
После исключения я звоню WhichFailedToLoad()
и результат
Не удалось загрузить libeay32.dll
Это простая программа, которая вызывает исключение:
url := 'https://www.google.it';
try
Web := TIdHTTP.Create(nil);
hIOHand := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv23];
Web.IOHandler := hIOHand;
Web.Request.UserAgent := INET_USERAGENT; //Custom user agent string
Web.RedirectMaximum := INET_REDIRECT_MAX; //Maximum redirects
Web.HandleRedirects := INET_REDIRECT_MAX <> 0; //Handle redirects
Web.ReadTimeOut := INET_TIMEOUT_SECS * 1000; //Read timeout msec
try
Sito := Web.Get(Url);
Sito := DateToStr(Web.Response.LastModified) + Sito;
except
on e : exception do
stg := WhichFailedToLoad();
end;
finally
Web.Free;
end;
Вы можете помочь мне решить проблему?
Ответы
Я поставил
libeay32.dll
иssleay32.dll
файлы в моем каталоге программы EXE
Это нормально. Это первое место, где их будет искать ОС.
и в
Windows\SYSWOW64
и вWindows\System32
Не делай этого! Несистемные файлы сюда не относятся. ОСОБЕННО, если вы помещаете одни и те же файлы в обе папки, поскольку Windows\SYSWOW64
он предназначен только для 32- Windows\System32
битных файлов и предназначен только для 64-битных файлов.
Не удалось загрузить libeay32.dll
Это означает, что Windows вообще не может загрузить эту DLL в память. Возможно, потому, что он не смог найти зависимый ssleay32.dll
файл, но, скорее всего, потому, что вы перепутали 32-битную и 64-битную версии DLL. Если ваше приложение скомпилировано как 32-битный EXE, вы должны использовать 32-битную версию обеих DLL. Если ваше приложение скомпилировано как 64-битный EXE, вы должны использовать 64-битную версию обеих DLL.