AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verständnisfrage offene Arrays, move und setlength
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage offene Arrays, move und setlength

Ein Thema von kmma · begonnen am 6. Apr 2023 · letzter Beitrag vom 8. Apr 2023
 
kmma

Registriert seit: 26. Jul 2010
16 Beiträge
 
Delphi 2 Desktop
 
#7

AW: Verständnisfrage offene Arrays, move und setlength

  Alt 7. Apr 2023, 17:19
Anstatt uns über den Sinn des ganzen im Dunkeln zu lassen, könntest du uns einfach erleuchten und wir finden eine andere Lösung.

Zitat:
move(x, R, 8);
Wer das macht, gehört eh bestraft.
Das ist einfach Herrlich. Danke Himitsu.
Ich würde aber weitergehen, das ist mutwillige Zerstörung von fremden Eigentum und gehört angekreidet. Zum Schluss erkennen dann wieder die Virenscanner alle Delhi Programme als Viren. Nur weil ein Verrückter wild im Speicher rumschreibt.
Inwiefern zerstöre ich fremdes Eigentum? Nach meinem Verständnis hat die Variable R die Größe 8 Byte und wenn ich da 8 Byte reinschiebe, was zerstöre ich dann?

Ich vruche es einmal zu erklären wie ich auf das Problem komme.
Ich bekomme aus einer externen Quelle, auf die ich keinen Einfluss habe (DLL), Datensätze, die wie folgt (vereinfacht) aufgebaut sind.
Delphi-Quellcode:
type TDatensatz = packed record
    Zahl1: integer;
    Beschreibung1: TStringlist;
    Zahl2: integer;
    Beschreibung2: TStringlist;
    ...
end;
In "Beschreibung" sind dann in jedem String im Klartext (ist eben so, kann ich nicht ändern) Untertypen beschreiben, z.B. "R=5; G=7; B=12"; "R=23; G=3; B=44" etc.

Um damit weiterarbeiten zu können möchte ich diese Datentypen in die folgende Struktur umwandeln:
Delphi-Quellcode:
type TUntertyp1 = packed record
    R: integer;
    G: integer;
    B: integer;
end;
type TUntertyp1Array = array of TUntertyp1;
type TMeinDatensatz = packed record
    Zahl1: integer;
    Untertyp1: TUntertyp1Array
    ...
end;
Da die Größe einer Stringlist und die Größe eines Array of TUnteryp (im packed Record) jeweils 4 Byte sind war meine Idee eben, die Daten aus TDatensatz zuerst 1:1 (per Move) in eine Veriable vom Typ TMeinDatensatz zu schreiben (sizeof(TMeindatensatz) und sizeo(TDatensatz) sind gleich groß) und dann die Größe von Untertyp1 auf die Anzahl der Strings in der Stringlist (Beschribung) zu setzen und dann im Untertyp die Felder mit einem Parser zu ermitteln. Dass ich nach dem kopieren der Daten nicht direkt auf den Untertyp zugreifen kann ist mir schon klar.
Die Frage ist eben, ob ich mit
Delphi-Quellcode:
var MeinDatensatz: TMeindatensatz;
move(Datensatz, Meindatensatz, sizeof(TMeindatensatz));
fillchar(MeinDatensatz.Untertyp1, 4, 0);
setlength(MeinDatensatz.Untertyp1, Datensatz.Beschreibung.count);
...
Irgendwas verbotenes mache oder ob das geht.

In diesem vereinfachten Besipiel könnte ich natürlich einfach die direkten Zuweisungen machen
Delphi-Quellcode:
MeinDatensatz.Zahl1 := Datensatz.Zahl1;
setlength(Meindatensatz.Untertyp1; Datensatz.Beschreibung.count);
...
In Wicklichkeit sind die Typen aber deutlich umfangreicher so dass mir eben die o.g. Idee als Vereinfachung gekommen ist.
  Mit Zitat antworten Zitat
 


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 10:38 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