SSLライブラリを読み込めませんでした-dllが見つかりません

Aug 21 2020

Delphi(10.3コミュニティエディション)プログラムで、OpenSSLライブラリでIndyを使用しようとしましたが、エラーが発生します

SSLライブラリを読み込めませんでした

私のOpenSSLライブラリはバージョン1.0.2uであり、libeay32.dllおよびssleay32.dllファイルをプログラムのEXEディレクトリ、およびに配置Windows\SYSWOW64Windows\System32ます。

EmbarcaderoDelphiパッチ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.dllssleay32.dll私のプログラムEXEディレクトリ内のファイルを

それは結構です。これは、OSがそれらを探す最初の場所です。

そして中Windows\SYSWOW64やでWindows\System32

そうしないでください!非システムファイルはそこに属していません。特に、両方のフォルダに同じファイルを配置する場合はWindows\SYSWOW64、32ビットファイルWindows\System32のみを対象とし、64ビットファイルのみを対象としているためです。

libeay32.dllの読み込みに失敗しました

これは、WindowsがそのDLLをメモリにまったくロードできなかったことを意味します。おそらく依存ssleay32.dllファイルが見つからなかったためですが、DLLの32ビットバージョンと64ビットバージョンを混同したためである可能性が高くなります。アプリが32ビットEXEとしてコンパイルされている場合は、両方のDLLの32ビットバージョンを使用する必要があります。アプリが64ビットEXEとしてコンパイルされている場合は、両方のDLLの64ビットバージョンを使用する必要があります。