Tidak dapat memuat pustaka SSL - dll tidak ditemukan
Dalam program Delphi (edisi komunitas 10.3) saya, saya mencoba menggunakan Indy dengan pustaka OpenSSL, tetapi saya menerima kesalahan
Tidak dapat memuat pustaka SSL
Perpustakaan OpenSSL saya adalah versi 1.0.2u dan saya meletakkan file libeay32.dll
dan ssleay32.dll
di direktori program EXE saya, dan di Windows\SYSWOW64
dan Windows\System32
.
Saya telah menginstal Patch Embarcadero Delphi RS1033_Indy_SSL_Patch .
Setelah pengecualian, saya menelepon WhichFailedToLoad()
dan hasilnya adalah
Gagal memuat libeay32.dll
Ini adalah program sederhana yang memunculkan pengecualian:
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;
Bisakah Anda membantu saya memecahkan masalah?
Jawaban
Saya meletakkan file
libeay32.dll
danssleay32.dll
di direktori program EXE saya
Ini baik saja. Itu adalah tempat pertama OS akan mencarinya.
dan masuk
Windows\SYSWOW64
dan masukWindows\System32
Jangan lakukan itu! File non-sistem tidak termasuk di sana. TERUTAMA jika Anda meletakkan file yang sama di kedua folder, karena Windows\SYSWOW64
dimaksudkan hanya untuk file 32bit dan Windows\System32
dimaksudkan hanya untuk file 64bit.
Gagal memuat libeay32.dll
Itu berarti Windows tidak dapat memuat DLL itu ke dalam memori sama sekali. Mungkin karena tidak dapat menemukan ssleay32.dll
file dependen , tetapi lebih mungkin karena Anda mencampur DLL versi 32bit dan 64bit. Jika aplikasi Anda dikompilasi sebagai EXE 32-bit, Anda harus menggunakan kedua DLL versi 32-bit tersebut. Jika aplikasi Anda dikompilasi sebagai EXE 64bit, Anda harus menggunakan versi 64bit dari kedua DLL.