Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
TPhysicalCharWidth = Byte;
TPhysicalCharWidths = Array of TPhysicalCharWidth;
PPhysicalCharWidth = ^TPhysicalCharWidth;
var
T1: TPhysicalCharWidths;
P: PPhysicalCharWidth;
I, Len: Integer;
begin
// Anzahl der Elemente festlegen
Len:= 10;
// Ursprungs-Array erzeugen und mit Daten belegen
SetLength(T1, I);
for I:= Low(T1) to High(T1) do begin
T1[I]:= I + 100;
end;
P:= @T1[0];
// Ab hier wird nur noch mit dem Zeiger gearbeitet
for I:= 0 to Len - 1 do begin
Integer(P):= Integer(P) + SizeOf(TPhysicalCharWidth);
P^:= P^ + 100;
end;
Caption:= IntToStr(T1[5]); // --> Ergibt 205
end;
Gelesen und geschrieben ins ursprüngliche Array of Byte. Jetzt muss ich nur noch die Adresse des ursprünglichen Zeigers P zwischenspeichern und am Ende wiederherstellen.
Meine Güte, das ist ja wirklich eine wilde Zeigerschubserei. Zwischendurch hat sich da sogar mein Virenschutz gemeldet und darin einen Trojaner erkannt.
@Bummi: Jetzt hab ichs auch gesehen in deinem Code. Hast natürlich recht, ich habe die Dereferenzierung in "Proz" übersehen.
Das Konstrukt ist im Originalquelltext an sich ziemlich

aber was will man machen. Es soll ja "nur" ein Backport werden und kein komplettes Rewite.