Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#14

So, jetzt hab ichs :-)

  Alt 2. Okt 2012, 11:59
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.
  Mit Zitat antworten Zitat