Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aufbau eines variablen Records (https://www.delphipraxis.net/84578-aufbau-eines-variablen-records.html)

yankee 19. Jan 2007 06:56

Re: Aufbau eines variablen Records
 
Zitat:

Zitat von Muetze1
Cardinal? 1? Ich weiss nicht was du meinst. Wie kommst du auf 1 Byte? Meinst du den Variablennamen?

Neein... In meinem Beispiel oben! Da fängt der String an der Stelle 1 im Speicher an und das ist was im Pointer steht... Wie komst du bitte auf den variabelnamen??
[quote="3_of_8"]Das glaube ich nicht. Der Cardinal '5' steht garantiert NICHT als 4 Bytes (0, 0, 0, 5) im Speicher, sondern als (5, 0, 0, 0). Das nennt sich "Little Endian-Format".[/qote]
Ja, ich weiss, was LittleEndian ist... Und es gibt auch BigEndian und es ist für das Beispiel doch auch egal... Geht mir doch nur ums Prinzip...
Zitat:

Zitat von Muetze1
Dass 's' in deinem Beispiel den Wert 1 hat, halte ich in Delphi für sehr, sehr unwahrscheinlich. Ein leerer String ist ein Pointer mit dem Wert 0, aber 1? Glaube ich nicht.

Natürlich ist das unwahrscheinlich. Das war ja auch nur ein BEISPIEL!

Muetze1 19. Jan 2007 08:51

Re: Aufbau eines variablen Records
 
Zitat:

Zitat von yankee
Zitat:

Zitat von Muetze1
Cardinal? 1? Ich weiss nicht was du meinst. Wie kommst du auf 1 Byte? Meinst du den Variablennamen?

Neein... In meinem Beispiel oben! Da fängt der String an der Stelle 1 im Speicher an und das ist was im Pointer steht... Wie komst du bitte auf den variabelnamen??

Weil das das einzige war, was soweit mit der Grösse von 1 übereinstimmte. Und das bei einem (Wide/Ansi)String das erste Zeichen beim indizierten Zugriff bei [1] liegt, hat nichts mit der Anordnung im Speicher zu tun. Bei Wide/AnsiString wird der Zugriff auf [1] auf Offset von 0 gelegt. Das ist nur zur Kompatibilität zum ShortString noch vorhanden und sagt überhaupt nichts über die Anordnung im Speicher aus.

shmia 19. Jan 2007 09:30

Re: Aufbau eines variablen Records
 
Das ganze Gefrickle mit "dynamischen Records" ist IMHO der ganz falsche Weg.
Wenn man stattdessen einfach Klassen verwendet steigt zwar der Overhead für den
Rechner etwas an (ca. 20% mehr Speicherplatzbedarf, ca. 10% mehr Rechenzeit),
aber auf der anderen Seite ergeben sich völlig neue Möglichkeiten.

Man nehme einfach eine Basisklasse (abgeleitet von TPersistent) und erzeuge pro Variante
eine weitere Klasse.
Dann nehme man TObjectList (als Ersatz für ein Array) und stopfe Objekte der Klassen hinein.
Zum Auslesen muss man einfach mit dem Operator IS prüfen, zu welcher Klasse das betrachtete Objekt
gehört und dann den Cast-Operator anwenden.

==> kein Rumgemache mit Zeigern, keine schmutzigen Tricks, alles ist sauber, klar und Objektorientiert :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr.
Seite 2 von 2     12   

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