下面的代码片段演示了我最近从最近的ISO映像文件重新安装的Delphi XE2中的文本IO和UInt64类型变量的问题 - 编译失败,并显示与缺少Text.ReadUInt64函数相关的错误消息或程序。如果我用
替换失败的行 ReadLn(F,A);
然后程序编译,正确写入
-1
18446744073709551615
到文本文件,然后(如预期的那样)在第二次读取时失败并出现EInOutError:“无效的数字输入”。我是否有损坏的安装或有人写入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;
答案 0 :(得分:5)
见QC102876。这是一个已知的错误,报告为Text.ReadUInt64 missing
,其描述如下:
当应该从流中读取UInt64时,编译器会生成对Text.ReadUInt64的调用。但是,链接器抱怨缺少Text.ReadUInt64。
根据QC,此问题(错误)在XE3(版本号#17.0.4625.53395)中得到解决。