私はリファクタリングのための古いプロジェクトを持っています。 これは32ビットのDelphi5プロジェクトです。64bitプロジェクトの32bitレコードから読み込み
新しいプロジェクトでは、64ビットアーキテクチャを使用する必要があります。
実際、私の指摘はファイルから古いデータ形式を読み取ることです。
ファイルには多くのフィールドが含まれています。
現時点では、整数の動的配列に問題があります。私の64ビットのプロジェクトで古いプロジェクト と にSizeOf(roomindex)= 8で
TCObject = record
Name:string[205];
roomindex:array of integer;
にSizeOf(roomindex)= 4。
だから私はあなたは私のサイズ= 4を使用するためにデルファイを言うためにどのような方法を
stream.Read(buf, SizeOf(TCObject))
としてファイルからデータを読み込むための問題を示すことができていますか? :)
ありがとうございます。
UPDATE: Davidは、データを読み取る実際のコードを提供する方がよいと述べています。
procedure ParseCDatabase(pBuff: Pointer; pSize: Integer);
var
curr:^TCObject;
i, n: Integer;
curri:^Integer;
begin
curri:= pBuff;
n:=curri^;
Inc(curri);
curr:=pointer(curri);
for i:=0 to n-1 do
begin
if Curr^.Name<>'' then
begin
COAddObject();
curro:=pointer(curr);
curro.RoomIndex:=integer(nil);
Fcodb[af][ai]:=curr^;
SetLength(Fcodb[af][ai].RoomIndex,0);
Inc(ai);
end;
inc(curr);
end;
end;
であるように私は、だから、だから、actualy、我々はそれを全く必要としないroomindexが読み込まれたことがわかりますが0にリセット ...コードを提供します。ダイナミックアレイの点の大きさは8今ではなく、4
あなたはここに全体の話をしているわけではありません。 Delphi 5で動作すると主張するコードは機能しません。ポインターはファイルに直接格納することはできません。なぜなら、ポインターは実行中のプロセスでのみ意味を持つからです。 'stream.Read(buf、SizeOf(TCObject))'は、どのバージョンのDelphiでも動作したことがありません。このレコードを永続させるときには、もっと深く掘り下げてプログラムが本当に何をするかを知る必要があります。実際のコードとは関係のない偽のコードを投稿することは、まったく役に立たない。あなたはこの質問をあまりに早く尋ねました。あなたは本当にナックルし、まず問題を理解する必要があります。ここでショートカットを期待しないでください。 –
うーん、私はここから始まらないだろう!しかし、あなたは何も選択する必要はありません。たぶんDsmのアプローチは健全です。 –
@DavidHeffernan私の質問を、古いプロジェクトの実際のコードで更新しました。 – mad