![]() |
DXE2; X64; Type cast
unter x32 ist folgende Code clean :
type TRGBArray = ARRAY[0..0] OF TRGBTriple; pRGBArray = ^TRGBArray; procedure ..... var : RowRotated : pRGBArray; begin ..... Dec(Integer(RowRotated), ScanLineBytes); //Move Pointer end; unter XE2 und x64 compiler folgender Fehler: [DCC Fehler] Unit1.pas(3327): E2064 Der linken Seite kann nichts zugewiesen werden ich denke der TypeCast Integer (..) geht nicht mehr unter x64, wie müsste der code denn sauber formuliert lauten ? |
AW: DXE2; X64; Type cast
(Integer war schon immer falsch da vorzeichenbehaftet. Speicheradressen sind nie negativ)
Integer ist hier falsch weil Integer 32 bit bleibt. Daher NativeInt bzw. NativeUInt oder besser bzw. richtig: LONG_PTR. :-) |
AW: DXE2; X64; Type cast
Da bei XE2 die Pointer-Arithmetik standardmäßig eingeschaltet ist, kann man den Pointer auch direkt einsetzen. Aber Achtung: dann muss mann die Schrittweite beachten! Die Hilfe sagt dazu:
Zitat:
|
AW: DXE2; X64; Type cast
funktioniert daher bei seinem Beispiel nicht. "Scanlinebytes" lässt vermuten das durch incrementieren die Zeile gewechselt werden soll. Und eine Zeile hat nicht zwangsläufig als Größe ein Vielfaches eines Pixels.
|
AW: DXE2; X64; Type cast
Zitat:
Zitat:
|
AW: DXE2; X64; Type cast
wollte endlich mal sauber programmieren und mit LONG_PTR geht der Code unter XE 2 , aber nicht mehr unter DELPHI 7
(wir haben alle alle Delphi Version im Team / Projekt ) |
AW: DXE2; X64; Type cast
Zitat:
|
AW: DXE2; X64; Type cast
Am saubersten ist wohl für alle Versionen:
Delphi-Quellcode:
PAnsiChar macht das gleiche, hat aber einen gewissen Beigeschmack... ;-)
Dec(PByte(RowRotated), ScanLineBytes);
//Move Pointer |
AW: DXE2; X64; Type cast
PByte gibt es erst seit "kurzem". PAnsiChar ist älter. Es kommt also darauf an, welche Delphi Versionen man unterstützen möchte, oder ob man einfach "type PByte = ^Byte;" selbst im Code hinterlegt.
|
AW: DXE2; X64; Type cast
Zitat:
Der Code von oben funktioniert mit PByte jedenfalls auch schon bei Delphi 3, auch TRGBTriple gibt es dort. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz