Delphi 2007和Indy10在IdStackWindows中编译错误

Ste*_*teB 4 delphi indy delphi-2007 indy10

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

IdStackWindows.pas(2364)错误:E2029'..'预期,但';' 发现

问题似乎是ka: tcp_keepalive2364年的第2364号声明TIdStackWindows.SetKeepAliveValues.

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

Ste*_*teB 5

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

  {$EXTERNALSYM TCP_KEEPALIVE}
  TCP_KEEPALIVE         = 3;
Run Code Online (Sandbox Code Playgroud)

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

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

[DCC错误] IdSSLOpenSSL.pas(980):E2065不满意的前向或外部声明:'IndySSL_CTX_use_certificate_chain_file'

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

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

  • 而不是编辑答案来描述变化,似乎最好编辑答案,简单地说,"有一些冲突的定义;确保你更新到至少checkin*xyz*来接收修复." 当全局变更已经可用时,我们不需要鼓励每个人更改其本地代码副本. (2认同)