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 可以给我们大家开导一下。
顺便说一句,我注意到如果在调试模式下进行编译,则不会发生致命的编译器错误。
我刚刚将我的 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 可以给我们大家开导一下。
顺便说一句,我注意到如果在调试模式下进行编译,则不会发生致命的编译器错误。