私は古いプロジェクトのソースを手に入れていますが、少し変更する必要がありますが、デルファイ2010だけで済むので大変なことになりました。文字列の問題デルファイ3からデルファイ2010への移行
bbil = record
path : string;
pos: byte;
nr: Word;
end;
後でこの定義は、ファイルからの読み取りに使用されています:
b_bil: file of bbil;
pbbil: ^bbil;
l_bil : tlist;
while not(eof(b_bil)) do
begin
new(pbbil);
read(b_bil, pbbil^);
l_bil.add(pbbil);
end
主要な問題は、コンパイラは型「string」中を受け入れない定義された記録があり
彼は「ファイナライゼーション」を望んでいるからだ。 "string"を "string [255]"または "shortstring"に変更しようとしました。これを行うと、アプリケーションはファイルを読み込んでいますが、間違ったコンテンツを読み込んでいます。
私の質問は、私はすでに、例えば多くのことをしようとしたファイルが
デルファイ2010年に「新」タイプに書かれた古い「文字列」タイプを変換する方法であります"{$ H-}"レコードに1文字だけ追加すると、ファイルはほぼ正確に読み取られますが、各データセットで1文字ずつ切り捨てられるため、ファイルは正しくなります。lengthbyte + 255charsの長さは正しいと思われますが、shortstringは一致しません。
両方Delphiで罰金を読み書きすることができるだろうレコード定義はコンパイラerrrorにも現れます: "finalize of bbil needed"。この方法でこれらのAnsiStringを短絡する "pfad:AnsiString [255];" "期待通りだが[見つかりました"]。私はおそらくShortAnsiStringが必要ですか? – rseffner
IMOあなたのコードはDelphi 3でもコンパイルすべきではありません。 AnsiChar;の 'path:array [0..N]'を試してください。ここでNは何らかの定数で、おそらく255です。 – kludg
Davidは言うとおり、文字列を 'ShortString'として宣言します。レコードのアライメントを行うには、パックされたレコード・ディレクティブを使用してください。このコードをD3で使用するには、{$ H-}指示文を使用していなければなりません。 –