Confused by UInt64



下面的代码片段演示了我最近从最近的ISO映像文件重新安装的Delphi XE2中的文本IO和UInt64类型变量的问题-编译失败并显示与丢失文本相关的错误消息。ReadUInt64功能或过程。如果我用

替换失败行
  ReadLn(F,A);

则程序编译后,正确写入

-1
18446744073709551615

到文本文件,然后(如预期的那样)在第二次读取时失败,并出现EInOutError: "Invalid Numeric Input"。我是否有一个损坏的安装或有人写ReadUInt64函数失败?我能在帮助中找到的关于ReadUInt64的唯一参考是以下定义:

function ReadUInt64: UInt64; virtual;
在System.Classes.TBinaryReader.ReadUInt64

。我不确定这是否是"相同"的功能,或者,如果是,为什么它是虚拟的…

我对Help中提到的UInt64也有点困惑。它将其定义为:

type UInt64 = Int64;

如果这是正确的,编译器如何知道将UInt64与Int64变量区别对待?

procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
  A : Int64;
  B : Uint64;
begin
{
Compiler warns on following line with message:
[DCC Warning] Unit1.pas(32): W1012 Constant expression violates subrange bounds
}
  A := $FFFFFFFFFFFFFFFF;
  B := $FFFFFFFFFFFFFFFF;
  AssignFile(F,'test.txt');
  ReWrite(F);
  Writeln(F,A);
  Writeln(F,B);
  CloseFile(F);
  AssignFile(F,'test.txt');
  ReSet(F);
  ReadLn(F,A);
{
Fails to compile on following line with message:
[DCC Fatal Error] Unit1.pas(42): E2158 System unit out of date or corrupted: missing 'Text.ReadUInt64'
}
  ReadLn(F,B);
  CloseFile(F);
end;

见QC102876。这是一个已知的bug,报告为Text.ReadUInt64 missing,描述为:

编译器生成对Text的调用。ReadUInt64,表示从流中读取一个UInt64。然而,链接器抱怨Text。缺少ReadUInt64

此问题(bug)已在XE3 (build #17.0.4625.53395)中解决,根据QC。

相关内容

  • 没有找到相关文章

最新更新