![]() |
INT64 unter Win32 unter in Items.Objects speichern ?
Hallo zusammen,
gibt es Möglichkeit einen INT64-Wert mittels
Delphi-Quellcode:
unter Win32 zu speichern ?
var iID : Int64;
begin // ... Items.AddObject('some-Text', Pointer(iID) ); 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 |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
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)
|
AW: INT64 unter Win32 unter in Items.Objects speichern ?
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:
Bei stringenter Verwendung von Interfaces entfällt sogar das Freigeben (sofern man das Formular selbst freigibt).
Type
TComboItem=Class Public Constructor Create (aID : Int64); Property ID : Int64 read fID write fID; End; |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
@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 ?! |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
Joar, oder du speicherst den Wert in 2 Items. :stupid:
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. |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
Zitat:
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. |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
[QUOTE=Dejan Vu;1263827]
Zitat:
Greetz Data |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
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). |
AW: INT64 unter Win32 unter in Items.Objects speichern ?
Scheiß legacy Code ;-)
|
AW: INT64 unter Win32 unter in Items.Objects speichern ?
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:
Nicht die allerschönste Lösung, aber das sollte keine Speicher-Lecks geben und ist relativ "einfach" um-/einzubauen.
TIDManager = class
public function AddID(const AID : Int64) : Integer; function GetID(const AKey : Integer) : Int64; // ..... end; Danke für das schnelle Feedback! :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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