Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Zeiger verschieben beim x64 Compiler (https://www.delphipraxis.net/177788-zeiger-verschieben-beim-x64-compiler.html)

Codehunter 27. Nov 2013 13:05

Zeiger verschieben beim x64 Compiler
 
Hi,

ich versuche die rkGlassButton-Komponente unter x64 zu kompilieren. Dummerweise steigt der Compiler da in der Zeile 400 aus:
Delphi-Quellcode:
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

Der schöne Günther 27. Nov 2013 13:10

AW: Zeiger verschieben beim x64 Compiler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vor dem Problem stand ich neulich auch, wenn ich es richtig im Hinterkopf hatte, hat es in dieser einen Methode den
Delphi-Quellcode:
Integer
auf
Delphi-Quellcode:
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.

Bernhard Geyer 27. Nov 2013 13:10

AW: Zeiger verschieben beim x64 Compiler
 
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.

himitsu 27. Nov 2013 13:18

AW: Zeiger verschieben beim x64 Compiler
 
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.

Codehunter 27. Nov 2013 13:21

AW: Zeiger verschieben beim x64 Compiler
 
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) :-D

Der schöne Günther 27. Nov 2013 13:24

AW: Zeiger verschieben beim x64 Compiler
 
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 :-)

Codehunter 27. Nov 2013 13:56

AW: Zeiger verschieben beim x64 Compiler
 
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.

jaenicke 27. Nov 2013 14:47

AW: Zeiger verschieben beim x64 Compiler
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1237630)
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.

Der schöne Günther 27. Nov 2013 14:54

AW: Zeiger verschieben beim x64 Compiler
 
Was soll das heißen? Haben sie früher gesagt, er wäre dynamisch?

Namenloser 27. Nov 2013 14:59

AW: Zeiger verschieben beim x64 Compiler
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1237651)
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
Delphi-Quellcode:
ActualNativeInt
:roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr.
Seite 1 von 2  1 2      

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