Tidak dapat memuat pustaka SSL - dll tidak ditemukan

Aug 21 2020

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.dlldan ssleay32.dlldi direktori program EXE saya, dan di Windows\SYSWOW64dan 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

2 RemyLebeau Aug 21 2020 at 00:24

Saya meletakkan file libeay32.dlldan ssleay32.dlldi direktori program EXE saya

Ini baik saja. Itu adalah tempat pertama OS akan mencarinya.

dan masuk Windows\SYSWOW64dan masukWindows\System32

Jangan lakukan itu! File non-sistem tidak termasuk di sana. TERUTAMA jika Anda meletakkan file yang sama di kedua folder, karena Windows\SYSWOW64dimaksudkan hanya untuk file 32bit dan Windows\System32dimaksudkan 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.dllfile 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.