我遇到了与此问题中提出的问题非常相似的问题(由于加载 SSL dll 的“问题”而必须在第一次加载时连接两次),但我很确定我使用的是最新版本的 Indy所以那里提出的解决方案不能解决我的问题。
我正在使用 Delphi7,并且我选择不从 Delphi7 安装程序安装 Indy,因为该版本非常过时。在下载和安装 Indy10(从 SVN 源)之前,我确实从最新的 SVN 源安装了 Indy9,但我重新配置了 IDE 和项目设置以使用新的 Indy10 组件/路径而不是 Indy9。显然,该项目正在使用 Indy10 构建,因为我必须更改很多方法以匹配所有 Indy10 签名以进行编译。
我的 Indy10 SVN 存储库已从以下位置签出:https ://svn.atozed.com:444/svn/Indy10/trunk/Lib并显示大约 2 周前的最后一次提交修订版 4972——这看起来不像“一些真正的旧版 Indy10”。
我已经从http://opendec.wordpress.com/的二进制构建中下载了适用于 Win32 的 OpenSSL 1.0.1e (从我之前提到的其他 stackoverflow 问题中推荐的位置)并将其放在与我构建的 .exe 相同的文件夹中
这是我现在用来打开 SSL 连接的代码:
try
POP.Connect(Server,Port,Protocol,UserName,Password,TimeOut);
Except
on e : EIdOSSLCouldNotLoadSSLLibrary do
begin
ShowMessage('Failed to load: ' + WhichFailedToLoad());
POP.Connect(Server,Port,Protocol,UserName,Password,TimeOut);
end;
end;
但是...这会导致 EIdOSSLCouldNotLoadSSLLibrary 异常,并且添加 WhichFailedToLoad 会显示完全相同的组件列表,这表明它需要 OpenSSL 的“indy specific”版本:
但是等一下…… Remy 在链接的问题中回答说:“Indy 10 已更新为不再需要定制的 DLL。它现在按原样使用标准化的 OpenSSL DLL。” 那么为什么它会抱怨它需要 Indy 特定的功能呢?
我该如何解决为什么它第一次无法连接/说它需要我理解不再需要的功能?我期望它不应该寻找 indy 特定的功能不正确吗?