Смущает тип uint64


Приведенный ниже фрагмент кода демонстрирует проблему, с которой я сталкиваюсь с переменными типа text IO и UInt64 в Delphi XE2, недавно повторно установленной из последнего файла образа ISO-компиляция завершается с сообщением об ошибке, относящимся к отсутствующему тексту.ReadUInt64 функция или процедура. Если я заменю неудачную строку на

  ReadLn(F,A);

Затем программа компилирует, корректно пишет

-1
18446744073709551615

В текстовый файл, а затем (как и ожидалось) происходит сбой при втором чтении с EInOutError: "недопустимое числовое значение Вход". Есть ли у меня поврежденная установка или кто-то не смог написать функцию ReadUInt64? Единственная ссылка на ReadUInt64, которую я могу найти в справке, - это следующее определение:

function ReadUInt64: UInt64; virtual;

В Системе.Занятия.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;
1 2

1 ответ:

См. QC102876 . Это известная ошибка, о которой сообщается как Text.ReadUInt64 missing, с описанием:

Компилятор генерирует вызов Text.ReadUInt64, когда UInt64 должен быть прочитан из потока. Компоновщик, однако, жалуется на этот текст.ReadUInt64 отсутствует.

Эта проблема (ошибка) решена в XE3 (build #17.0.4625.53395), согласно QC.