Смущает тип 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 ответ:
См. QC102876 . Это известная ошибка, о которой сообщается как
Text.ReadUInt64 missing
, с описанием:Компилятор генерирует вызов Text.ReadUInt64, когда UInt64 должен быть прочитан из потока. Компоновщик, однако, жалуется на этот текст.ReadUInt64 отсутствует.
Эта проблема (ошибка) решена в XE3 (build #17.0.4625.53395), согласно QC.