![]() |
Zeiger verschieben beim x64 Compiler
Hi,
ich versuche die ![]()
Delphi-Quellcode:
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?
inc(Integer(s1), ptrD);
Wahrscheinlich muss die Schrittweite auch verdoppelt werden, da ja Pointer bei x64 auch doppelt so groß sind. Richtig? Grüße Cody |
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:
auf
Integer
Delphi-Quellcode:
zu ändern.
NativeInt
Ich habe meine .pas nochmal angehängt, anscheinend waren es nur zwei Stellen (mit "TODO"-Kommentar markiert). Läuft bei mir unter 64Bit problemlos. |
AW: Zeiger verschieben beim x64 Compiler
Evtl. würde sich hier der Wechsel auf
![]() Der normale Integer bleibt (wie auch bei .NET/Java/...) auch unter x64 bei 4 Byte größe. |
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. |
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 ![]() |
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 :-)
|
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. |
AW: Zeiger verschieben beim x64 Compiler
Zitat:
|
AW: Zeiger verschieben beim x64 Compiler
Was soll das heißen? Haben sie früher gesagt, er wäre dynamisch?
|
AW: Zeiger verschieben beim x64 Compiler
Zitat:
Und wenn dann irgendwann 128 Bit-CPUs kommen und Delphi dann noch existiert, dann kommt wahrscheinlich
Delphi-Quellcode:
:roll:
ActualNativeInt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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-2025 by Thomas Breitkreuz