AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign INT64 unter Win32 unter in Items.Objects speichern ?
Thema durchsuchen
Ansicht
Themen-Optionen

INT64 unter Win32 unter in Items.Objects speichern ?

Ein Thema von DataCool · begonnen am 30. Jun 2014 · letzter Beitrag vom 30. Jun 2014
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:16
Hallo zusammen,

gibt es Möglichkeit einen INT64-Wert mittels
Delphi-Quellcode:
var iID : Int64;
begin
  // ...
  Items.AddObject('some-Text', Pointer(iID) );
unter Win32 zu speichern ?

Ja mir ist klar Win32: Pointer = 4 Byte und Win64: Pointer = 8 Byte .....

Gibt es einen Weg diese Problematik elegant zu umgehen ?

Mir ist bis jetzt nur eingefallen eine Klasse zu erstellen die einen Int64 Wert als Property hat und dann die Klasse mit Pointer(oMyInt64)
entsprechend zu speichern, aber diese Lösung hätte weitgehende Konsequenzen ...

Bin für jede Hilfe/Anregung dankbar,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:19
Die einzige Lösung ist soweit ich das sehe "Pointer auf irgendwas". Z.B. ginge auch ein Pointer direkt auf einen Int64. Aber den Speicher dafür musst du dann auch manuell anfordern und freigeben (New/Dispose)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:23
Interessanterweise heißt die Methode 'AddObject' und nicht 'AddPointer'. Was läge also näher, als den Namen wörtlich zu nehmen und ein Objekt zu erstellen, das die Int64-ID enthält (und -wer weiss- vielleicht noch weitere, nützliche Informationen).
Delphi-Quellcode:
Type
  TComboItem=Class
  Public
    Constructor Create (aID : Int64);
    Property ID : Int64 read fID write fID;
  End;
Bei stringenter Verwendung von Interfaces entfällt sogar das Freigeben (sofern man das Formular selbst freigibt).

Geändert von Dejan Vu (30. Jun 2014 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:25
@Neutral General:
Ja stimmt, das sollte auch funktionieren ..., würde aber auch massive Source-Änderungen nach sich ziehen ... das wollte ich eigentlich vermeiden ....

@Dejan Vu:
Das ist ja der Lösungsweg, den ich selber schon beschrieben hatte, aber auch das erfordert einige Änderungen am Source ....


Vielleicht hat ja jemand noch einen "Genie-Streich" im Petto ?!
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:28
Joar, oder du speicherst den Wert in 2 Items.
Oder wenn es nicht ganz genau sein muß, bei größeren Werten, dann kannst du auch einen Single (4 Byte) statt dem Int64 verwenden.
Oder in dem Object steht nur die ID/Index des Wertes, zu einer Daten-Liste, bzw. speicherst in der GUI garkeine Werte, sondern verwaltets alles nur im Hintergrund.

Wenn dieses Items die Objektinstanzen verwalten kann (ala OwnsObjects), dann kommst du mit dem Datenobjekt besser, als mit 'nem PInt64.

Man kann natürlich auch das Items ableiten und macht intern die Umwandlung von Int64 auf das "Object".
Bzw. via ClassHelper eine zusätzliche Umwandlungs-/Übergabe-/Auslesefunktion, aber dafür wäre dann wieder die automatische Speicherverwaltung (OwnsObjects) nötig.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (30. Jun 2014 um 14:37 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:31
@Dejan Vu:
Das ist ja der Lösungsweg, den ich selber schon beschrieben hatte, aber auch das erfordert einige Änderungen am Source ....
Yo, ich sollte mir angewöhnen, besser zu lesen.

Mein Tipp: Mach es richtig: Heute etwas mehr Arbeit, aber ab morgen hast Du was davon. Saubere Arbeit ist auch eine Investition in die Zukunft.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:37
[QUOTE=Dejan Vu;1263827]
@Dejan Vu:
...
Mein Tipp: Mach es richtig: Heute etwas mehr Arbeit, aber ab morgen hast Du was davon. Saubere Arbeit ist auch eine Investition in die Zukunft.
Absolut meine Meinung, aber wenn das Kind schon in den Brunnen gefallen ist, wollte ich eigentlich nicht den Brunnen ab und wieder aufbauen

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:41
Du verebreiterst entweder den Brunnen, damit der Retter zum Kind runter kann und danach passt dann auch ein ganz fettes Kind da rein (Ableitung),
bzw. buddelst einen zweiten Gang daneben, wo auch ein fetter Retter durch passt, bis zu dem Kind runter (ClassHelper).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:43
Scheiß legacy Code
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: INT64 unter Win32 unter in Items.Objects speichern ?

  Alt 30. Jun 2014, 14:52
Ich glaube ich werde es so realisieren das ich mir eine ID-Manger-Klasse baue, die dann die IDs mit einen Integer-Schlüssel-Wert verwaltet
und sich um den Speicher kümmert, ähnlich einem der Wege die Himitsu vorgeschlagen hat ...

Delphi-Quellcode:
TIDManager = class
  public
    function AddID(const AID : Int64) : Integer;
    function GetID(const AKey : Integer) : Int64;
// .....
end;
Nicht die allerschönste Lösung, aber das sollte keine Speicher-Lecks geben und ist relativ "einfach" um-/einzubauen.

Danke für das schnelle Feedback!

Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.

Geändert von DataCool (30. Jun 2014 um 15:21 Uhr)
  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 14:31 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