Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi inkompatibel TArray<Integer> Pointer (https://www.delphipraxis.net/197405-inkompatibel-tarray-integer-pointer.html)

EWeiss 4. Aug 2018 14:11


inkompatibel TArray<Integer> Pointer
 
Unter 32 Bit habe ich hier kein Problem..
Delphi-Quellcode:
var
  pXY: PPoint;

meta := Pointer(pXY);
In 64 Bit meckert der Compiler
Zitat:

[dcc64 Error] uSpriteContainer.pas(4481): E2010 Incompatible types: 'System.TArray<System.Integer>' and 'Pointer'
??

anderes Problem
Zitat:

[dcc64 Warning] uSpriteContainer.pas(6299): W1000 Symbol 'Seek' is deprecated
Delphi-Quellcode:
FileStream.Seek(AniHeader.offset - 1, soFromBeginning);

Was nehmen statt dessen ?

gruss

Uwe Raabe 4. Aug 2018 14:22

AW: inkompatibel TArray<Integer> Pointer
 
Was ist PPoint? Das aus System.Types?

Was ist meta?

Zitat:

Zitat von EWeiss (Beitrag 1409758)
Delphi-Quellcode:
FileStream.Seek(AniHeader.offset - 1, soFromBeginning);

Was nehmen statt dessen ?

Das andere overload:
Delphi-Quellcode:
FileStream.Seek(AniHeader.offset - 1, soBeginning);

EWeiss 4. Aug 2018 14:26

AW: inkompatibel TArray<Integer> Pointer
 
Zitat:

Was ist PPoint? Das aus System.Types
Ja..

Zitat:

Was ist meta?
Dachte das wäre ersichtlich ;)

Delphi-Quellcode:
TArray<Integer>


gruss

mkinzler 4. Aug 2018 14:27

AW: inkompatibel TArray<Integer> Pointer
 
Zitat:

anderes Problem
Zitat:
[dcc64 Warning] uSpriteContainer.pas(6299): W1000 Symbol 'Seek' is deprecated
FileStream.Seek(AniHeader.offset - 1, soFromBeginning);
Was nehmen statt dessen ?
Nicht seek ist veraltet nur eine der 3 überladenen Versionen. Komischerweise die mit größeren möglichen Offset (64 Bit).

Delphi-Quellcode:
FileStream.Seek(AniHeader.offset - 1, TSeekOrigin.soFromBeginning);

EWeiss 4. Aug 2018 14:29

AW: inkompatibel TArray<Integer> Pointer
 
Das funktioniert :) Danke Uwe
Delphi-Quellcode:
FileStream.Seek(AniHeader.offset - 1, soBeginning);


gruss

Uwe Raabe 4. Aug 2018 15:12

AW: inkompatibel TArray<Integer> Pointer
 
Delphi-Quellcode:
procedure Main;
var
  meta: TArray<Integer>;
  pXY: PPoint;
begin
  meta := Pointer(pXY); // [dcc32 Fehler] Project403.dpr(31): E2010 Inkompatible Typen: 'System.TArray<System.Integer>' und 'Pointer'
end;
Funktioniert hier auch unter Win32 nicht und gibt die gleiche Fehlermeldung.

EWeiss 4. Aug 2018 15:18

AW: inkompatibel TArray<Integer> Pointer
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1409772)
Delphi-Quellcode:
procedure Main;
var
  meta: TArray<Integer>;
  pXY: PPoint;
begin
  meta := Pointer(pXY); // [dcc32 Fehler] Project403.dpr(31): E2010 Inkompatible Typen: 'System.TArray<System.Integer>' und 'Pointer'
end;
Funktioniert hier auch unter Win32 nicht und gibt die gleiche Fehlermeldung.

Aber mit D2010 hatte bisher nie Probleme damit. (kann nur 32Bit)

gruss

Uwe Raabe 4. Aug 2018 15:28

AW: inkompatibel TArray<Integer> Pointer
 
Zitat:

Zitat von EWeiss (Beitrag 1409774)
Aber mit D2010 hatte bisher nie Probleme damit.

Dann was das vermutlich ein Fehler in D2010. Eigentlich darf dieser Cast nicht funktionieren. Ein dynamisches Array verwaltet seine Länge und den Referenzzähler in einem Bereich vor dem ersten Element. Bei dem Cast ist vollkommen unklar, was dann in diesem Bereich steht. Das kann eigentlich nur schief gehen.

http://docwiki.embarcadero.com/RADSt...he_Array-Typen

EWeiss 4. Aug 2018 15:33

AW: inkompatibel TArray<Integer> Pointer
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1409775)
Zitat:

Zitat von EWeiss (Beitrag 1409774)
Aber mit D2010 hatte bisher nie Probleme damit.

Dann was das vermutlich ein Fehler in D2010. Eigentlich darf dieser Cast nicht funktionieren. Ein dynamisches Array verwaltet seine Länge und den Referenzzähler in einem Bereich vor dem ersten Element. Bei dem Cast ist vollkommen unklar, was dann in diesem Bereich steht. Das kann eigentlich nur schief gehen.

http://docwiki.embarcadero.com/RADSt...he_Array-Typen

Ich glaube dir das ;)

Aber bitte siehe shot!
Das es durchläuft ohne Fehler kannst du am aktuellen Breakpoint sehen dieser ist weiter unten.
Delphi-Quellcode:
meta := Pointer(pXY);


dann ist
Delphi-Quellcode:
meta[0] := pXY.X;
meta[1] := pXY.Y;
gruss

Uwe Raabe 4. Aug 2018 15:45

AW: inkompatibel TArray<Integer> Pointer
 
Ich weiß ja nicht, wie du pXY zuweist. Wenn das ein Pointer auf das erste Element eines TArray<Integer> ist, dann funktioniert das natürlich, weil dann die betreffenden Speicherbereiche ja sinnvolle Werte beinhalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz