Impossibile caricare la libreria SSL - dll non trovata
Nel mio programma Delphi (10.3 community edition), provo ad usare Indy con la libreria OpenSSL, ma ricevo un errore
Impossibile caricare la libreria SSL
La mia libreria OpenSSL è la versione 1.0.2u e inserisco i file libeay32.dll
e ssleay32.dll
nella directory EXE del mio programma e in Windows\SYSWOW64
e Windows\System32
.
Ho installato Embarcadero Delphi Patch RS1033_Indy_SSL_Patch .
Dopo l'eccezione, chiamo WhichFailedToLoad()
e il risultato è
Impossibile caricare libeay32.dll
Questo è un semplice programma che solleva l'eccezione:
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;
Potete aiutarmi a risolvere il problema?
Risposte
Ho inserito i file
libeay32.dll
essleay32.dll
nella directory EXE del mio programma
Questo va bene. Questo è il primo posto in cui il sistema operativo li cercherà.
e dentro
Windows\SYSWOW64
e dentroWindows\System32
Non farlo! I file non di sistema non vi appartengono. SOPRATTUTTO se stai inserendo gli stessi file in entrambe le cartelle, poiché Windows\SYSWOW64
è pensato solo per file a 32 bit ed Windows\System32
è pensato solo per file a 64 bit.
Impossibile caricare libeay32.dll
Ciò significa che Windows non è stato in grado di caricare quella DLL in memoria. Probabilmente perché non è riuscito a trovare il ssleay32.dll
file dipendente, ma più probabilmente perché hai confuso le versioni a 32 e 64 bit delle DLL. Se la tua app è compilata come EXE a 32 bit, devi usare la versione a 32 bit di entrambe le DLL. Se la tua app è compilata come EXE a 64 bit, devi usare la versione a 64 bit di entrambe le DLL.