AGB  ·  Datenschutz  ·  Impressum  







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

TObject und negativer Int64

Ein Thema von Int3g3r · begonnen am 19. Feb 2021 · letzter Beitrag vom 23. Feb 2021
Antwort Antwort
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

TObject und negativer Int64

  Alt 19. Feb 2021, 18:53
Guten Abend,

Kann mir jemand erläutern was bei folgendem Code genau passiert ?
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var myObj:TObject;
    negNumber: Int64;
begin
  negNumber := -1;
  myObj := TObject(negNumber);
  showmessage(int64(myObj).ToString);
end;
Bei showmessage() wird mir 4294967295 ausgegeben. Ich erwarte aber -1.

Habe bereits einen ähnlichen Artikel gefunden bei dem es um einen extended geht.
https://www.delphipraxis.net/151440-...-extended.html

Ich benötige den Cast ins TObject auch um einer Liste eine ID mitzugeben.
Wie dort beschrieben wäre eine Lösung eine helper Klasse zu erstellen, find ich eigentlich gut soweit. Ich möchte nur verstehen warum bei meinem Beispiel oben nicht -1 ausgegeben wird.

Gruss Int3g3r

PS: Ist eine 32bit Applikation.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#2

AW: TObject und negativer Int64

  Alt 19. Feb 2021, 19:03
Ein Pointer ist 32Bit

Int64 64Bit.

Da passt vielleicht etwas nicht zusammen.

Nur ne Vermutung

Was passiert, wenn du aus dem Int64 ein "normales" integer machst. Nur Probehalber mal.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TObject und negativer Int64

  Alt 19. Feb 2021, 20:05
Klar, man kann über Integer als Zwischenschritt casten, dann sind im Nagetiven 2 Millarden Werte verfügbar, aber dafür geht es im Positiven nun statt bis 4 nur noch bis 2 Milliarden, von den paar Trilliarden des Int64.
Wenn du mal nachsiehts, was mit den Bits im Zweierkomplement los ist, dann weißt du auch warum.


Fazit: Mach es richtig.

Es soll ein Object sein, also nimm auch ein Daten-Objekt und pack den Wert dort rein.

Delphi-Quellcode:
type
  TMyData = class
    Value: Int64;
    constructor Create(Value: Int64);
  end;


procedure TForm1.Button3Click(Sender: TObject);
var myObj:TObject;
    negNumber: Int64;
begin
  negNumber := -1;
  myObj := TMyData.Create(negNumber);
  showmessage(TMyData(myObj).Value.ToString);

  // irgendwo nicht vergessen
  myObj.Free;
end;







Oder das Programm in 64 Bit compilieren.
$2B or not $2B

Geändert von himitsu (19. Feb 2021 um 20:33 Uhr)
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TObject und negativer Int64

  Alt 23. Feb 2021, 09:29
Besten Dank für die Antworten
  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 02:17 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