AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DXE2; X64; Type cast

Ein Thema von bernhard_LA · begonnen am 26. Okt 2011 · letzter Beitrag vom 28. Okt 2011
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

DXE2; X64; Type cast

  Alt 26. Okt 2011, 17:28
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: DXE2; X64; Type cast

  Alt 26. Okt 2011, 17:50
(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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's

Geändert von SirThornberry (26. Okt 2011 um 17:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: DXE2; X64; Type cast

  Alt 26. Okt 2011, 18:09
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:
Wenn X ein Zeigertyp ist, wird X um N-mal der Größe des Typs, auf den gezeigt wird, dekrementiert. Für

type PMyType = ^TMyType;

und

var P: PMyType;

verringert die Anweisung Dec(P) P um SizeOf(TMyType).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

AW: DXE2; X64; Type cast

  Alt 27. Okt 2011, 13:37
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: DXE2; X64; Type cast

  Alt 27. Okt 2011, 14:13
funktioniert daher bei seinem Beispiel nicht. "Scanlinebytes" lässt vermuten das durch incrementieren die Zeile gewechselt werden soll.
Deshalb ja auch meine Anmwerkung.

Und eine Zeile hat nicht zwangsläufig als Größe ein Vielfaches eines Pixels.
Aber ganz sicher hat eine Zeile als Größe ein Vielfaches der eines Pixels. Dieses Vielfache ist exakt die Anzahl der Pixel pro Zeile.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DXE2; X64; Type cast

  Alt 27. Okt 2011, 19:40
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 )
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: DXE2; X64; Type cast

  Alt 27. Okt 2011, 20:29
wollte endlich mal sauber programmieren und mit LONG_PTR geht der Code unter XE 2 , aber nicht mehr unter DELPHI 7
Dann musst du eben auf das "alte" PAnsiChar zurückgreifen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: DXE2; X64; Type cast

  Alt 27. Okt 2011, 21:34
Am saubersten ist wohl für alle Versionen:
Delphi-Quellcode:
Dec(PByte(RowRotated), ScanLineBytes);
//Move Pointer
PAnsiChar macht das gleiche, hat aber einen gewissen Beigeschmack...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: DXE2; X64; Type cast

  Alt 27. Okt 2011, 22:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: DXE2; X64; Type cast

  Alt 28. Okt 2011, 05:30
PByte gibt es erst seit "kurzem". PAnsiChar ist älter.
Gut, ob es das bei Delphi 1 oder 2 schon gab, weiß ich nicht, aber weder hätte ich vermutet, dass es hier um Delphi 1 oder 2 geht (wenn es das da noch nicht gibt), noch hätte ich Delphi 3 als "seit kurzem" angesehen...

Der Code von oben funktioniert mit PByte jedenfalls auch schon bei Delphi 3, auch TRGBTriple gibt es dort.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke (28. Okt 2011 um 05:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
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