Не удалось загрузить библиотеку SSL - dll не найдена

Aug 21 2020

В моей программе 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;

Вы можете помочь мне решить проблему?

Ответы

2 RemyLebeau Aug 21 2020 at 00:24

Я поставил 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.