Delphi 2007和Indy10在IdGlobal中编译错误

时间:2015-02-20 16:58:35

标签: delphi delphi-2007 indy10

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

  

[DCC错误] IdGlobal.pas(8657):F2084内部错误:C4963

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我不知道改变的时间和原因,但我有同样的问题(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,这是我能做的最好的。也许雷米可以启发我们所有人。

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