Einzelnen Beitrag anzeigen

Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: inkompatibel TArray<Integer> Pointer

  Alt 6. Aug 2018, 18:53
Dein casten zu TArray<integer> ist definitiv falsch! Du hast kein Tarray<Integer>


Das funktioniert unter 32 und 64 Bit:

Delphi-Quellcode:
const
  maxIntArraysize = (maxint-sizeof(integer)) div sizeof(integer);

 type
  IntArray = Array [0.. maxIntArraysize] of integer;
  PIntArray = ^IntArray;

 procedure Main;
var
   ArraySize: Integer;
   xy: TArray<TPoint>;
   meta: PIntArray;

   pXY: PPoint;
   x1: Integer;
   x2: Integer;
   y1: Integer;
   y2: Integer;
begin
   writeln('Sizeof TPoint ', sizeof(Tpoint));
   writeln('Sizeof Integer ', sizeof(Integer));

   SetLength(xy, 10);
   xy[0].x := 80 + 110; xy[0].y := 135 + 50;
   xy[1].x := 140 + 110; xy[1].y := 130 + 50;
   xy[2].x := 160 + 110; xy[2].y := 80 + 50;
   xy[3].x := 180 + 110; xy[3].y := 130 + 50;
   xy[4].X := 240 + 110; xy[4].y := 135 + 50;
   xy[5].X := 192 + 110; xy[5].y := 165 + 50;
   xy[6].X := 210 + 110; xy[6].y := 220 + 50;
   xy[7].X := 160 + 110; xy[7].y := 190 + 50;
   xy[8].X := 110 + 110; xy[8].y := 220 + 50;
   xy[9].X := 128 + 110; xy[9].y := 165 + 50;

   Writeln('ArraySize Points ', length(xy));
   // Length of integer Array
   ArraySize := length(xy) *2;
   Writeln('ArraySize integer ', ArraySize);
   pXY := @xy[0];
   meta := Pointer(pXY);
   {$R+}
   x1 := meta[0];
   y1 := meta[1];

   x2 := meta[ArraySize - 2];
   y2 := meta[ArraySize - 1];
   Writeln(x1:6, y1:6, x2:6, y2:6);
end;
Fritz Westermann
  Mit Zitat antworten Zitat