【发布时间】:2012-10-28 09:47:23
【问题描述】:
我已经删除了一个 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;
tia
【问题讨论】:
-
我第一次从 WhichFailedToLoad 中得到这个错误。显示,我第二次按下它的按钮。为什么第一次就不行?更新了问题以使其更清晰
-
我认为它显示了在加载 OpenSSL 库时找不到哪些导出的函数。检查您的 OpenSSL 库。如果它之后工作,那么您的代码可能没有使用任何丢失的导出,因此您也可以忽略这种情况下的异常。
-
hmm,我放了一个标志,所以它第一次执行额外的获取并吞噬了它抛出的异常 - 我仍然在第二次获取时收到消息,然后我进入睡眠状态(10 ) 在 2 次获取之间,消息消失了。有没有其他方法可以在不尝试连接的情况下加载 dll?
-
您将 SSL DLL 放在哪里?在与可执行文件相同的文件夹中?
-
是的。我检查了它们是 Delphi indy 的 - 我这里没有下载 - 这是我明天必须检查的东西。从网上查看 - 这是因为我使用了错误的 DLL,所以可能搜索路径错误,或者是版本问题。你还有什么可以建议我检查的吗?谢谢