AGB  ·  Datenschutz  ·  Impressum  







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

64Bit Datentyp prüfen

Ein Thema von venice2 · begonnen am 10. Sep 2022 · letzter Beitrag vom 16. Sep 2022
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

64Bit Datentyp prüfen

  Alt 10. Sep 2022, 13:40
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?
  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
 
#2

AW: 64Bit Datentyp prüfen

  Alt 10. Sep 2022, 15:19
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: 64Bit Datentyp prüfen

  Alt 10. Sep 2022, 15:24
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.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 64Bit Datentyp prüfen

  Alt 16. Sep 2022, 15:05
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.
Dennis
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: 64Bit Datentyp prüfen

  Alt 16. Sep 2022, 15:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: 64Bit Datentyp prüfen

  Alt 16. Sep 2022, 15:18
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');
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (16. Sep 2022 um 15:24 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: 64Bit Datentyp prüfen

  Alt 16. Sep 2022, 15:43
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!

Geändert von venice2 (16. Sep 2022 um 16:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: 64Bit Datentyp prüfen

  Alt 16. Sep 2022, 16:01
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.

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 ......
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (16. Sep 2022 um 16:04 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#9

AW: 64Bit Datentyp prüfen

  Alt 16. Sep 2022, 16:04
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.
  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 12:08 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