以下のコード スニペットは、最近の ISO イメージ ファイルから最近再インストールした Delphi XE2 のテキスト IO および UInt64 型変数で発生している問題を示しています。Text.ReadUInt64 関数またはプロシージャが見つからないことに関連するエラー メッセージが表示され、コンパイルが失敗します。失敗した行を次のように置き換えると
ReadLn(F,A);
その後、プログラムはコンパイルされ、正しく書き込まれます
-1
18446744073709551615
その後、(予想どおり) 2 回目の読み取りで EInOutError: "Invalid Numeric Input" で失敗します。インストールが破損していますか、それとも誰かが ReadUInt64 関数の記述に失敗しましたか? ヘルプで見つけることができる ReadUInt64 への唯一の参照は、次の定義です。
function ReadUInt64: UInt64; virtual;
System.Classes.TBinaryReader.ReadUInt64 で。これが「同じ」機能なのかどうかはわかりませんが、もしそうなら、なぜそれが仮想なのですか...
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;