首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >首次连接Indy10 SSL失败

首次连接Indy10 SSL失败
EN

Stack Overflow用户
提问于 2013-04-06 17:41:54
回答 1查看 1.1K关注 0票数 1

我遇到的问题与this problem中提出的问题非常相似(由于加载SSL的“问题”,第一次加载时必须连接两次),但我非常肯定我使用的是Indy的最新版本,因此这里提出的解决方案不会解决我的问题。

我使用的是Delphi7,我选择不从Delphi7安装程序安装Indy,因为该版本非常明确。在下载和安装Indy9之前,我确实从最新的SVN源安装了Indy10,但是我重新配置了Indy10和项目设置,以使用新的Indy10组件/路径而不是Indy9。显然,该项目正在使用Indy10进行构建,因为有许多方法我不得不更改,以匹配所有的Indy10签名,甚至编译。

我的Indy10 SVN存储库是从:https://svn.atozed.com:444/svn/Indy10/trunk/Lib中签出的,并显示了大约2周前最后一次提交修订版4972 --这看起来不像是“某个真正旧的Indy10版本”。

我下载了OpenSSL 1.0.1e用于Win32的二进制构建在http://opendec.wordpress.com/ (从我前面提到的其他堆栈溢出问题推荐的位置),并将它放在与构建的.exe相同的文件夹中

下面是我现在用来打开SSL连接的代码:

代码语言:javascript
复制
  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特定“版本:

但等一下..。雷米在链接问题中回答说:"Indy 10已经更新为不再需要定制的DLL了,它现在使用的是标准化的OpenSSL DLL。“那么,它为什么要抱怨自己需要独立的功能呢?

我怎么能排除为什么它第一次连接失败/说它需要我理解的不再需要的函数?我的期望是它不应该寻找独立的特定功能不正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-06 20:13:50

我的猜测,在对这个问题的评论中证实了,您的编译器正在查找Indy 9,而不是Indy 10来构建您的项目。

事情可能会变得更糟,因为您的IDE可能在设计时使用一个版本,而编译器可能使用不同的版本。实际上,IDE和编译器是链的不同部分,您可以破坏两者之间的原始同步。因为这一点,我将解释这两种情况,正如我稍后解释的,您必须同时更改这两种情况。

IDE和设计时间

设计时包由IDE加载,以便在工作时创建对象,在“对象”检查器中显示该对象的属性,创建表单DFM文件,并在使用IDE生成pascal代码以响应事件时使用该方法。

对于IDE,您可以通过右键单击任何Indy组件来检查您在设计时使用的版本,如图像所示。

若要更改设计时使用的版本,请转到Component\Install packages并检查列表中的正确版本。您不能同时加载Indy 9和Indy 10。

编译器和运行时

编译器使用库路径查找您在项目中使用的单元,这些单元不是项目本身的一部分,并与您的代码一起编译以生成可执行文件。

要检查Indy版本链接到您的可执行文件中,可以求助于所有INdy组件上的INdy属性,例如:

代码语言:javascript
复制
ShowMessage('Indy version: ' + MyIndyComponent.Version);

要更改编译器首先发现的内容,必须更改路径。您可以在IDE中完成此操作。在现代Delphi中,您可以签入Tools\Options\Delphi options\Library\Library path\Project\Options\Delphi compiler\Search path\ (我只是不记得D7中的选项在哪里)。

Indy 9/10案件

Indy引入了界面破坏更改,这使得无法使用Indy 10编译为Indy 9编写的项目。事实上,该项目的管理员不会等待一个主要版本来破坏代码兼容性,而且您希望在升级到任何次要版本时,如果有不同的接口,您将被迫调整代码。

因此,您肯定在编译/运行时和IDE/设计时都使用Indy 9,因此您必须在您的环境中对两者进行调整。在此之后,准备重新编写部分代码以进行调整。一旦你了解了什么改变了,并学会了如何适应,这个改变就相当简单了。这些细节不在这个答案的范围之内,但是互联网上有足够的信息让你想办法解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15854057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档