No se pudo cargar la biblioteca SSL - dll no encontrado
En mi programa Delphi (edición comunitaria 10.3), trato de usar Indy con la biblioteca OpenSSL, pero recibo un error
No se pudo cargar la biblioteca SSL
Mi biblioteca OpenSSL es la versión 1.0.2u y puse los archivos libeay32.dll
y ssleay32.dll
en el directorio EXE de mi programa, y en Windows\SYSWOW64
y Windows\System32
.
He instalado Embarcadero Delphi Patch RS1033_Indy_SSL_Patch .
Después de la excepción, llamo WhichFailedToLoad()
y el resultado es
No se pudo cargar libeay32.dll
Este es un programa simple que plantea la excepción:
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;
¿Me pueden ayudar a resolver el problema?
Respuestas
Puse los archivos
libeay32.dll
y en el directorio EXE de mi programassleay32.dll
Eso está bien. Ese es el primer lugar donde el sistema operativo los buscará.
y dentro
Windows\SYSWOW64
y dentroWindows\System32
¡No hagas eso! Los archivos que no son del sistema no pertenecen allí. ESPECIALMENTE si está colocando los mismos archivos en ambas carpetas, ya que Windows\SYSWOW64
está diseñado solo para archivos de 32 bits y Windows\System32
solo para archivos de 64 bits.
No se pudo cargar libeay32.dll
Eso significa que Windows no pudo cargar esa DLL en la memoria. Probablemente porque no pudo encontrar el ssleay32.dll
archivo dependiente, pero más probablemente porque mezcló las versiones de 32 bits y 64 bits de las DLL. Si su aplicación está compilada como un EXE de 32 bits, debe usar la versión de 32 bits de ambas DLL. Si su aplicación está compilada como un EXE de 64 bits, debe usar la versión de 64 bits de ambas DLL.