Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 64Bit Datentyp prüfen (https://www.delphipraxis.net/211398-64bit-datentyp-pruefen.html)

venice2 10. Sep 2022 12:40

64Bit Datentyp prüfen
 
Wie kann man am schnellsten prüfen ob der gesetzte Datentyp 64Bit tauglich ist.
Gibt es dafür einen Profiler oder ähnliches?

Gibt es die Möglichkeit überhaupt ohne jede einzelne Variable oder Funktion zu prüfen?

Uwe Raabe 10. Sep 2022 14:19

AW: 64Bit Datentyp prüfen
 
Wie definierst du denn 64-Bit tauglich?

Es gibt Datentypen, die in 64-Bit anders sind als unter 32-Bit. Es gibt sogar Datentypen, die sind unter Posix-64 anders als sonst. Ob man diese unter 64-Bit verwenden muss hängt stark vom Kontext ab. Man kann z.B. nicht generell sagen, Integer sei nicht 64-Bit tauglich.

In der Regel weist einen der Compiler schon auf Fehler hin. Eine Ausnahme ist das kürzlich von dir geschilderte Problem mit dem untypisierten Prozedurpointer. In dem Fall kann vermutlich gar nichts helfen.

venice2 10. Sep 2022 14:24

AW: 64Bit Datentyp prüfen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1511546)
Wie definierst du denn 64-Bit tauglich?

Es gibt Datentypen, die in 64-Bit anders sind als unter 32-Bit. Es gibt sogar Datentypen, die sind unter Posix-64 anders als sonst. Ob man diese unter 64-Bit verwenden muss hängt stark vom Kontext ab. Man kann z.B. nicht generell sagen, Integer sei nicht 64-Bit tauglich.

In der Regel weist einen der Compiler schon auf Fehler hin. Eine Ausnahme ist das kürzlich von dir geschilderte Problem mit dem untypisierten Prozedurpointer. In dem Fall kann vermutlich gar nichts helfen.

Ok Danke dann werde ich mich wohl da durchwurschteln müssen.

Dennis07 16. Sep 2022 14:05

AW: 64Bit Datentyp prüfen
 
Ich habe etwa genauso (wenig) verstanden was du exakt suchst. Aber eventuell hilft dir Delphi-Referenz durchsuchenSystem.SizeOf und die Direktiven-Funktion Declared(...) zusammen mit der Bedingung CPUX64.

venice2 16. Sep 2022 14:09

AW: 64Bit Datentyp prüfen
 
Zitat:

Zitat von Dennis07 (Beitrag 1511901)
Ich habe etwa genauso (wenig) verstanden was du exakt suchst. Aber eventuell hilft dir Delphi-Referenz durchsuchenSystem.SizeOf und die Direktiven-Funktion Declared(...) zusammen mit der Bedingung CPUX64.

Du hast es nicht verstanden Uwe hingegen schon und hat es entsprechend beantwortet.

himitsu 16. Sep 2022 14:18

AW: 64Bit Datentyp prüfen
 
Natürlich kann man alles möglich prüfen, was man will

Delphi-Quellcode:
SizeOf(Igendwas) = 8 // immer 64 Bit
SizeOf(Igendwas) = SizeOf(Pointer) // so groß wie aktuell ein Zeiger
(SizeOf(Igendwas) = 8) and Defined(CPUX64) // nur 64 Bit, wenn 64 Bit, sonst egal
(SizeOf(Igendwas) = 8) and Declared(Sonstwas) // nur 64 Bit, wenn was Anderes vorhanden, sonst egal
SizeOf(Igendwas) * 8 = 64 // wirklich 64 Bit und nicht etwa 8 Byte
...
Delphi-Quellcode:
{$IF SizeOf(Igendwas) <> SizeOf(Pointer)}
  {$MESSAGE Error 'paßt ni'}
{$IFEND}

// oder erst zur Laufzeit
Assert(SizeOf(Igendwas) = SizeOf(Pointer), 'paßt ni');

venice2 16. Sep 2022 14:43

AW: 64Bit Datentyp prüfen
 
Zitat:

Zitat von himitsu (Beitrag 1511904)
Natürlich kann man alles möglich prüfen, was man will

Delphi-Quellcode:
SizeOf(Igendwas) = 8 // immer 64 Bit
SizeOf(Igendwas) = SizeOf(Pointer) // so groß wie aktuell ein Zeiger
(SizeOf(Igendwas) = 8) and Defined(CPUX64) // nur 64 Bit, wenn 64 Bit, sonst egal
(SizeOf(Igendwas) = 8) and Declared(Sonstwas) // nur 64 Bit, wenn was Anderes vorhanden, sonst egal
SizeOf(Igendwas) * 8 = 64 // wirklich 64 Bit und nicht etwa 8 Byte
...
Delphi-Quellcode:
{$IF SizeOf(Igendwas) <> SizeOf(Pointer)}
  {$MESSAGE Error 'paßt ni'}
{$IFEND}

// oder erst zur Laufzeit
Assert(SizeOf(Igendwas) = SizeOf(Pointer), 'paßt ni');

Du hast die Frage auch nicht verstanden.

Daher nochmal etwas verständlicher.
Ausgangssituation.. 32Bit Anwendung.
Gibt es ein Programm das mir den Sourcecode von der 32Bit Anwendung in 64Bit Konvertiert?
Ohne das ich selbst jeden als bsp. Integer auf Tauglichkeit hin prüfen muß?

Integer in 32Bit funktioniert unter 64Bit hingegen jedoch nicht obwohl so wie Uwe sagt zitiere
Zitat:

Man kann z.B. nicht generell sagen, Integer sei nicht 64-Bit tauglich.
Daher denke ich war meine Frage beantwortet.

Edit:
Anderes Beispiel.
32Bit a: Cardinal // funktioniert aber nicht unter 64Bit
32Bit a: THandle // funktioniert unter 32Bit und 64 Bit
Erkennt ein Sourcecode Konverter so etwas? Denke mal nicht!

himitsu 16. Sep 2022 15:01

AW: 64Bit Datentyp prüfen
 
Oder du hast es nicht verstanden. :wink:

Es gibt nicht "das" 64 Bit und somit ist ein automatisches Konvertieren garnicht möglich, weil woher soll der Konverter wissen, was "du" willst.

Dass es automatisch von 16 zu 32 zu 64 Bit geht, erreicht man dadurch, dass der Entwickler die "richtigen" Typen verwendet.

Soll etwas auch unter 64 Bit 32 Bei groß bleiben dann z.B. LongInt
und soll etwas unter 64 Bit mit wachsen, dann z.B. NativeInt oder LPAREM/WPARAM/LRESULT bei SendMessage use.

An vielen Stellen gibt es Prüfungen, z.B. beim Cast, wo der Compiler dann knallt oder warnt, aber natürlich kann das nicht alle Sonderfälle abfangen, vor allem nicht da, wo es nichts zum Prüfen/Vergleichen gibt.

Was man aber machen kann, den Typen verwenden, welcher nach aktuellem Stand das macht, was man will (jetzt und hofentlich in Zukunft),
und falls man jetzt noch keine Ahnung hat, was in paar Jahren passiert, aber jetzt schon weiß, was man jetzt&später will, dann kann man Prüfungen einbauen.

z.B. war mal Integer der wachsende/compilerabhängige Typ ... schon damals von 16 zu 32 Bit.
Konnte damals aber keiner Ahnen, dass jemand (CPU-Hersteller, andere Compiler-Entwickler und Co.) auf die saudämliche Idee kommt den Typen einzufrieren und stattdessen einen neuen Typen zu erfinden.



Das selbe Problem gab es damals 2009 beim String.
Hätten ALLE dort AnsiChar/AnsiString benutzt, wo es es weiterhin ANSI bleiben muß,
und dort Char/String, wo es jetzt Unicode sein darf, dann ......

venice2 16. Sep 2022 15:04

AW: 64Bit Datentyp prüfen
 
Zitat:

Oder du hast es nicht verstanden.
Es gibt nicht "das" 64 Bit und somit ist ein automatisches Konvertieren garnicht möglich, weil woher soll der Konverter wissen, was "du" willst.
Doch habe Ich nach Uwe seiner Aussage.
Zitat:

Man kann z.B. nicht generell sagen, Integer sei nicht 64-Bit tauglich.
Daher war das Thema für mich schon abgeschlossen...

Danke aber für deine Ausführliche Beschreibung warum es nicht möglich ist.
Könnte wichtig sein für Leute die vor dem selben Problem stehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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