【问题标题】:Could not load SSL library - dll not found无法加载 SSL 库 - 找不到 dll
【发布时间】:2020-08-20 17:12:31
【问题描述】:

在我的 Delphi(10.3 社区版)程序中,我尝试将 Indy 与 OpenSSL 库一起使用,但收到错误消息

无法加载 SSL 库

我的 OpenSSL 库是 1.0.2u 版本,我将 libeay32.dllssleay32.dll 文件放在我的程序 EXE 目录以及 Windows\SYSWOW64Windows\System32 中。

我已经安装了 Embarcadero Delphi 补丁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;

你能帮我解决这个问题吗?

【问题讨论】:

  • 附带说明,您根本不应该在SSLOptions.SSLVersions 属性中包含sslvSSLv23。在此特定示例中,TIdSSLIOHandlerSocketOpenSSL 将简单地丢弃它。

标签: delphi ssl indy


【解决方案1】:

我将libeay32.dllssleay32.dll 文件放在我的程序EXE 目录中

没关系。这是操作系统寻找它们的第一个位置。

Windows\SYSWOW64Windows\System32

不要那样做!非系统文件不属于那里。特别是如果您将相同的文件放在两个文件夹中,因为Windows\SYSWOW64 仅适用于 32 位文件,Windows\System32 仅适用于 64 位文件。

加载 libeay32.dll 失败

这意味着 Windows 根本无法将该 DLL 加载到内存中。可能是因为它找不到依赖的ssleay32.dll 文件,但更可能是因为您混淆了 32 位和 64 位版本的 DLL。如果您的应用程序编译为 32 位 EXE,则必须使用两个 DLL 的 32 位版本。如果您的应用程序编译为 64 位 EXE,则必须使用两个 DLL 的 64 位版本。

【讨论】:

  • Yes Remy...我删除了所有版本,我只在 exe 目录中重新安装了 32 位文件 libeay32.dll 和 ssleay32.dll,我解决了问题...很简单...但我花了很多时间来解决这个问题!谢谢雷米,你是最棒的!! ...和...我已经更正了 SSLVersions :)
猜你喜欢
  • 2013-06-10
  • 2021-07-25
  • 2020-09-04
  • 2020-11-23
  • 1970-01-01
  • 2021-11-14
  • 2012-02-18
  • 1970-01-01
  • 2017-07-28
相关资源
最近更新 更多