2013-03-19 4 views
2

Нижеприведенный фрагмент кода демонстрирует проблему, с которой я столкнулся с переменными типа 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; 

ответ

5

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

The compiler generates a call to Text.ReadUInt64, when an UInt64 should be read from a stream. The linker, however, complains that Text.ReadUInt64 is missing.

Эта проблема (ошибка) решается в XE3 (сборка # 17.0.4625.53395), в соответствии с КК.

+1

Без какой-либо информации здесь, это не ответ. Это становится бессмысленным, если ссылка на QC перемещена или недоступна (что случается довольно часто, к сожалению). Можете ли вы добавить некоторые детали из отчета о контроле качества здесь, чтобы в этом была информация? Как и в этом случае, это должно быть отмечено как ответ на ссылку только для местоположения за пределами площадки, что обычно приводит к удалению модераторов. :-) –

+0

@KenWhite, я добавил всю информацию. Это чистая ошибка в RTL, и она исправлена. Код OP так же хорош, как и в отчете QC, чтобы выявить ошибку. –

+2

Я добавил немного больше информации и заблокировал цитату из отчета об ошибке. Дополнительная информация делает его более полезным для кого-то в будущем, который находит это при поиске, но не может по какой-то причине попасть на сайт КК. Спасибо (и +1). :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^