Нижеприведенный фрагмент кода демонстрирует проблему, с которой я столкнулся с переменными типа IO и UInt64 в Delphi XE2, недавно повторно установленный из последнего файла образа ISO - сбой компиляции с сообщением об ошибке, связанным с отсутствующим текстом .ReadUInt64 функция или процедура. Если я заменю провальную линию сConfused by UInt64
ReadLn(F,A);
тогда программа компилируется, правильно пишет
-1
18446744073709551615
в текстовый файл, а затем (как и ожидалось) не на втором чтении с EInOutError: «Invalid Числовой ввод ". У меня поврежденная установка или кто-то не смог написать функцию 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;
Без какой-либо информации здесь, это не ответ. Это становится бессмысленным, если ссылка на QC перемещена или недоступна (что случается довольно часто, к сожалению). Можете ли вы добавить некоторые детали из отчета о контроле качества здесь, чтобы в этом была информация? Как и в этом случае, это должно быть отмечено как ответ на ссылку только для местоположения за пределами площадки, что обычно приводит к удалению модераторов. :-) –
@KenWhite, я добавил всю информацию. Это чистая ошибка в RTL, и она исправлена. Код OP так же хорош, как и в отчете QC, чтобы выявить ошибку. –
Я добавил немного больше информации и заблокировал цитату из отчета об ошибке. Дополнительная информация делает его более полезным для кого-то в будущем, который находит это при поиске, но не может по какой-то причине попасть на сайт КК. Спасибо (и +1). :-) –