【问题标题】:Delphi 2007 and Indy10 compile error in IdStackWindowsDelphi 2007 和 Indy10 在 IdStackWindows 中编译错误
【发布时间】:2015-06-03 08:56:49
【问题描述】:

我刚刚将我的 Indy10 安装更新到最新版本 (5276),现在尝试编译 Windows 应用程序时出现错误。

IdStackWindows.pas(2364) 错误:E2029 '..' 预期但 ';'找到了

问题似乎是ka: tcp_keepaliveTIdStackWindows.SetKeepAliveValues 的第2364 行的声明。

我在 Windows 7 Professional x64 上使用 Delphi 2007。

【问题讨论】:

    标签: delphi indy delphi-2007 indy10


    【解决方案1】:

    经过进一步调查,我发现在 IdWinsock2.pas 中声明了一个新的TCP_KEEPALIVE 常量:

      {$EXTERNALSYM TCP_KEEPALIVE}
      TCP_KEEPALIVE         = 3;
    

    这与现有的 tcp_keepalive 记录冲突,因此已重命名为 _tcp_keepalive。将TIdStackWindows.SetKeepAliveValues() 中声明的ka 变量更新为此新类型名可解决错误。

    然后我在 IdSSLOpenSSL.pas 中发现了另一个编译问题:

    [DCC 错误] IdSSLOpenSSL.pas(980): E2065 Unsatisfied forward 或 外部声明:'IndySSL_CTX_use_certificate_chain_file'

    可以通过在从第 1155 行开始的 {$IFDEF STRING_IS_UNICODE} 块的 {$ELSE} 部分添加缺少的 IndySSL_CTX_use_certificate_chain_file() 实现来解决此错误,并让它简单地调用 OpenSSL 的标准 SSL_CTX_use_certificate_chain_file() 函数。

    更新:
    在 5277 及更高版本中提供了所有必要的修复(如上所述)。

    【讨论】:

    • 现在,让 Remy 也了解一下这个修复。
    • 我相信 Remy Lebeau 会看到这个问题,查看更改并尽快提交修复。
    • 我已经检查了我的修复。不过,SteB 针对 OpenSSL 错误提出的修复方案并不是正确的解决方案。我已经实现了正确的。
    • @RemyLebeau - 我知道你做了什么,你能编辑我的答案以包括你的更改以及为什么它们是必要的吗?
    • 与其编辑答案来描述变化,不如编辑答案简单地说,“有一些冲突的定义;确保你更新到至少签入 xyz i> 接收修复。”当更改已经在全球范围内可用时,我们不需要鼓励每个人更改他们的本地代码副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    相关资源
    最近更新 更多