Delphi IdGlobal 中的 2007 和 Indy10 编译错误

Delphi 2007 and Indy10 compile error in IdGlobal

我刚刚将我的 Indy10 安装更新到最新版本 (5260),现在我在尝试编译从电子邮件服务器接收电子邮件的 Windows 服务时遇到错误。

[DCC Error] IdGlobal.pas(8657): F2084 Internal Error: C4963

恢复到修订版 5239 不会导致问题。

问题似乎在第 8633 行的 IdGlobal.ReadLnFromStream 中:

LBufSize := ReadTIdBytesFromStream(AStream, LBuf, LBufSize);

我想知道这是否是一个 64 位问题,有其他人遇到过这个问题吗?我在 Windows 7 Professional x64 上使用 Delphi 2007。

我不知道这发生了变化的时间和原因,但我遇到了同样的问题 (Delphi 2007)。 ReadTIdBytesFromStream 似乎期望将 int64 (TIdStreamSize) 作为 Count 参数传递,但传递的变量 (LBufSize) 是一个整数。

这似乎会导致编译器出现相当大的问题,并引发内部错误。我浏览了 Indy 代码,直到找到此函数调用的其他未生成错误的示例。

我在TIdHashIntf.GetHashBytes方法中找到了这段代码并借鉴了它

 repeat
   LSize := ReadTIdBytesFromStream(AStream,LBuf,IndyMin(ASize, 2048));

然后我更改了 ReadLnFromStream 中的代码:

repeat
  LBufSize := IndyMin(LStrmSize - LStrmPos, LBUFMAXSZE);
  LBufSize := ReadTIdBytesFromStream(AStream, LBuf, LBufSize);

至此

repeat
  LBufSize := ReadTIdBytesFromStream(AStream, LBuf, IndyMin(LStrmSize - LStrmPos, LBUFMAXSIZE));

现在 Indy 再次构建并符合要求。

据我所知,此更改不会产生任何影响(除了修复损坏的构建),但我可以理解这有点 WTF。无需深入探讨为什么某些变量是 int,其他变量是 int64,而另一些变量是 TIdStreamSize,这是我能做的最好的。或许 Remy 可以给我们大家开导一下。

顺便说一句,我注意到如果在调试模式下进行编译,则不会发生致命的编译器错误。