1

我已经删除了一个 TIdHTTP 和一个 TIdSSLIOHandlerSocketOpenSSL,将 IdHTTP 的 IOHandler 设置为 SSL 处理程序,将 TIdSSLIOHandlerSocketOpenSSL 的模式设置为 sllmClient。然后在下面添加了按钮单击事件。我第一次从 WhichFailedToLoad 收到此错误。

在此处输入图像描述

显示,我第二次按下它的按钮。ssl dll 位于 .exe 目录中。

该服务在浏览器中运行良好,并且正在生产中。为什么第一次就不行?

procedure TForm32.Button1Click(Sender: TObject);
var
  output : TMemoryStream;
begin
    output:=TMemoryStream.Create;
//    IdOpenSSLSetLibPath(
  try
    IdHTTP1.get('https://localhost:444/Folder/service.svc',output);
    output.position := 0;
    memo1.lines.LoadFromStream(output);
  except
    on exception do
    ShowMessage(WhichFailedToLoad());
  end;
end;

蒂亚

4

2 回答 2

3

您必须使用一个非常旧且过时的 Indy 10 版本 - 该消息框中报告的大多数功能都带有_Indy后缀。

Indy 9 和更早版本以及早期的 Indy 10 版本需要定制的 OpenSSL DLL,这些 DLL 添加了 Indy 特定的函数来访问尚未在公共 OpenSSL API 中公开的内部 OpenSSL 数据。一旦这些数据在后来的 API 版本中公开,Indy 10 就被更新为不再需要定制构建的 DLL。它现在按原样使用标准化的 OpenSSL DLL。

因此,您要么需要追踪旧的定制 Indy OpenSSL DLL,要么需要升级到最新的 Indy 10 版本。

于 2012-11-08T19:11:21.457 回答
3

您应该更新到最新版本的 Indyssl dll,这应该完全摆脱异常。

于 2012-11-08T13:59:19.233 回答