Delphi IdStackWindows 中的 2007 和 Indy10 编译错误

Delphi 2007 and Indy10 compile error in IdStackWindows

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

IdStackWindows.pas(2364) Error: E2029 '..' expected but ';' found

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

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

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

  {$EXTERNALSYM TCP_KEEPALIVE}
  TCP_KEEPALIVE         = 3;

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

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

[DCC Error] IdSSLOpenSSL.pas(980): E2065 Unsatisfied forward or external declaration: '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 及更高版本中提供了所有必要的修复(如上所述)。