下面的代码片段演示了我在最近从最近的XE2镜像文件重新安装的Delphi XE2中遇到的文本IO和UInt64类型变量的问题-编译失败并显示与缺少Text.ReadUInt64函数或过程相关的错误消息。如果我将失败的行替换为
ReadLn(F,A);然后程序编译,正确地写出
-1
18446744073709551615然后(不出所料)在第二次读取时失败,并显示EInOutError:"Invalid Numeric“。我的安装是否已损坏,或者是否有人无法编写ReadUInt64函数?我可以在帮助中找到的对ReadUInt64的唯一引用是以下定义:
function ReadUInt64: UInt64; virtual;在System.Classes.TBinaryReader.ReadUInt64中。我不确定这是不是“相同”的函数,或者,如果是,为什么它是虚拟的……
我也对Help对UInt64的引用感到有点困惑。它将其定义为:
type UInt64 = Int64;如果这是正确的,编译器如何知道以不同于Int64变量的方式对待UInt64?
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;发布于 2013-03-20 06:06:41
参见QC102876。这是一个已知的错误,报告名称为Text.ReadUInt64 missing,描述如下:
当应该从流中读取UInt64时,编译器会生成对Text.ReadUInt64的调用。然而,链接器抱怨Text.ReadUInt64丢失了。
根据QC的说法,这个问题(bug)在XE3 (build #17.0.4625.53395)中得到了解决。
https://stackoverflow.com/questions/15510876
复制相似问题