AGB  ·  Datenschutz  ·  Impressum  







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

Zeiger verschieben beim x64 Compiler

Ein Thema von Codehunter · begonnen am 27. Nov 2013 · letzter Beitrag vom 28. Nov 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codehunter
Codehunter

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

Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:05
Hi,

ich versuche die rkGlassButton-Komponente unter x64 zu kompilieren. Dummerweise steigt der Compiler da in der Zeile 400 aus: inc(Integer(s1), ptrD); s1 ist hier ein Pointer, ptrD ein Integer (die Benennung finde ich zwar seltsam, aber naja). Der Compiler läuft bei x86 durch, bei x64 sagt er "Der linken Seite kann nichts zugewiesen werden" und meint damit den Typcast s1 auf Integer. Wie verschiebe ich den Zeiger in dem Fall richtig?

Wahrscheinlich muss die Schrittweite auch verdoppelt werden, da ja Pointer bei x64 auch doppelt so groß sind. Richtig?

Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:10
Vor dem Problem stand ich neulich auch, wenn ich es richtig im Hinterkopf hatte, hat es in dieser einen Methode den Integer auf NativeInt zu ändern.

Ich habe meine .pas nochmal angehängt, anscheinend waren es nur zwei Stellen (mit "TODO"-Kommentar markiert). Läuft bei mir unter 64Bit problemlos.
Angehängte Dateien
Dateityp: pas rkGlassButton.pas (51,7 KB, 10x aufgerufen)

Geändert von Der schöne Günther (27. Nov 2013 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:10
Evtl. würde sich hier der Wechsel auf NativeInt helfen.
Der normale Integer bleibt (wie auch bei .NET/Java/...) auch unter x64 bei 4 Byte größe.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:18
Man kann auch gern auf PAnsiChar casten, statt auf Integer NativeInt.
Für die PChar-Typen ist die Zeigerarithmetik aktiviert.

Und es müsste auch einen IntPtr-Typen geben (oder wie der nochmal hieß), welcher hier eigentlich für die Pointer-Typkonvertierung genommen werden sollte.

Integer war mal ein dynamischer Typ (z.B. in DOS und Win 1.0 war er noch 16 Bit), aber vorallem Intel, Microsoft und Co. hatten sich dann entschieden diesen Typen einzufrieren und Delphi ist hier blöder Weise mit dem Strom mitgeschwomen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Nov 2013 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

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

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:21
Danke euch beiden dreien! Das ging ja wirklich easy. Ich hätts mir schlimmer vorgestellt weil da sehr viel an Pointern rumgeschubst wird.

Diese simple Lösung hätte Emba ruhig auch mal in seinem entsprechenden Docfile erwähnen können (Abschnitt Zeigeroeprationen)
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:24
Nach dem ersten Reinschauen in den Quellcode dachte ich auch erst "Dann eben nicht..." aber glücklicherweise war es wirklich nur diese Stelle. Die ganzen anderen Clever-Komponenten liefen ohne jegliche Anpassung direkt auf 64 Bit
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

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

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 14:56
Ja er schreibt schon wirklich coole Sachen. War nicht das gute alte TBX auch von ihm? Den GlassButton finde ich besonders faszinierend, weil er da eigentlich das Unmögliche schafft: Ohne Layered-Window den Hintergrund des Buttons zu zeichnen und dann als Hintergrund für das Canvas-Objekt des Buttons zu verwenden. Das klappt so gut, dass man ihn sogar auf ein Stretched-Image legen und dann das Image in der Größe ändern kann. Der Button wird trotzdem transparent und ohne Artefakte gezeichnet.

Scheint aber so als würde er zur Zeit nicht viel machen, die meisten Updates stammen aus 2011.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 15:47
Die ganzen anderen Clever-Komponenten liefen ohne jegliche Anpassung direkt auf 64 Bit
Hätte Embarcadero den Datentyp Integer bei der Einführung von 64-Bit entsprechend der Dokumentation behandelt, hätte auch dieser Fall hier sofort kompiliert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 15:54
Was soll das heißen? Haben sie früher gesagt, er wäre dynamisch?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Zeiger verschieben beim x64 Compiler

  Alt 27. Nov 2013, 15:59
Was soll das heißen? Haben sie früher gesagt, er wäre dynamisch?
Ja, genau das.

Und wenn dann irgendwann 128 Bit-CPUs kommen und Delphi dann noch existiert, dann kommt wahrscheinlich ActualNativeInt

Geändert von Namenloser (27. Nov 2013 um 16:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:18 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