我刚刚将我的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 回答
我不知道何时以及为什么会改变但我有同样的问题(Delphi 2007) . 似乎ReadTIdBytesFromStream期望int64(TIdStreamSize)作为Count参数传递,但传递的变量(LBufSize)是一个整数 .
这似乎会导致编译器出现相当大的问题,并引发内部错误 . 我浏览了Indy代码,直到我发现此函数调用的其他示例没有产生错误 .
我在TIdHashIntf.GetHashBytes方法中找到了这段代码并借用了它
然后我改变了ReadLnFromStream中的代码:
对此
而现在Indy再次 Build 并遵守 .
据我所知,这个改变不会影响任何东西(除了修复破坏的构建),但我可以理解它有点像WTF . 如果不深入了解为什么有些变量是int,有些是int64而有些则是TIdStreamSize,这是我能做的最好的 . 也许雷米可以启发我们所有人 .
顺便提一下,我注意到如果在调试模式下编译,则不会发生致命的编译器错误 .