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 及更高版本中提供了所有必要的修复(如上所述)。
我刚刚将我的 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 及更高版本中提供了所有必要的修复(如上所述)。