首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被UInt64迷惑了

被UInt64迷惑了
EN

Stack Overflow用户
提问于 2013-03-20 05:33:56
回答 1查看 716关注 0票数 2

下面的代码片段演示了我在最近从最近的XE2镜像文件重新安装的Delphi XE2中遇到的文本IO和UInt64类型变量的问题-编译失败并显示与缺少Text.ReadUInt64函数或过程相关的错误消息。如果我将失败的行替换为

代码语言:javascript
复制
  ReadLn(F,A);

然后程序编译,正确地写出

代码语言:javascript
复制
-1
18446744073709551615

然后(不出所料)在第二次读取时失败,并显示EInOutError:"Invalid Numeric“。我的安装是否已损坏,或者是否有人无法编写ReadUInt64函数?我可以在帮助中找到的对ReadUInt64的唯一引用是以下定义:

代码语言:javascript
复制
function ReadUInt64: UInt64; virtual;

在System.Classes.TBinaryReader.ReadUInt64中。我不确定这是不是“相同”的函数,或者,如果是,为什么它是虚拟的……

我也对Help对UInt64的引用感到有点困惑。它将其定义为:

代码语言:javascript
复制
type UInt64 = Int64;

如果这是正确的,编译器如何知道以不同于Int64变量的方式对待UInt64?

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-20 06:06:41

参见QC102876。这是一个已知的错误,报告名称为Text.ReadUInt64 missing,描述如下:

当应该从流中读取UInt64时,编译器会生成对Text.ReadUInt64的调用。然而,链接器抱怨Text.ReadUInt64丢失了。

根据QC的说法,这个问题(bug)在XE3 (build #17.0.4625.53395)中得到了解决。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15510876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档