SSL 라이브러리를로드 할 수 없습니다. dll을 찾을 수 없습니다.

Aug 21 2020

델파이 (10.3 커뮤니티 에디션) 프로그램에서 OpenSSL 라이브러리와 함께 Indy를 사용하려고하는데 오류가 발생합니다.

SSL 라이브러리를로드 할 수 없습니다.

내 OpenSSL 라이브러리는 버전 1.0.2u이고 libeay32.dllssleay32.dll파일을 내 프로그램 EXE 디렉토리 Windows\SYSWOW64Windows\System32.

Embarcadero Delphi Patch 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

프로그램 EXE 디렉토리에 libeay32.dllssleay32.dll파일을 넣습니다.

괜찮습니다. 이것이 OS가 찾는 첫 번째 장소입니다.

그리고 안으로 Windows\SYSWOW64그리고 안으로Windows\System32

하지마! 비 시스템 파일은 거기에 속하지 않습니다. 특히 32 비트 파일 전용이고 64 비트 파일 전용 이므로 두 폴더에 동일한 파일 을 넣는 경우 특히 그렇습니다 .Windows\SYSWOW64Windows\System32

libeay32.dll을로드하지 못했습니다.

이는 Windows가 해당 DLL을 메모리에 전혀로드 할 수 없음을 의미합니다. 아마도 종속 ssleay32.dll파일을 찾을 수 없기 때문일 수 있지만 32 비트 및 64 비트 버전의 DLL을 혼합했기 때문일 수 있습니다. 앱이 32 비트 EXE로 컴파일 된 경우 두 DLL의 32 비트 버전을 사용해야합니다. 앱이 64 비트 EXE로 컴파일 된 경우 두 DLL의 64 비트 버전을 사용해야합니다.