Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 12.12.07 14:05 
Hi,
ich brauche ein record mit einem dynamischen record.
Also so etwas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Type Tpart=record
  id:Integer;
  laenge:Integer;
  data:array[1..laenge] of Byte;


jetzt habe ich ein pointer auf ein bytearray (z.b. von der recv funktion aus der ws32 bibliothek)
das möchte ich darein schreiben. (die struktur des bytearrays ist so wie oben im record)

wie mache ich das? denn ein dynamisches array is doch ne liste (also mit pointern auf das nächste element)

geht es überhaupt? wie muss es richtig aussehn? wie schreibe ich meine bytefolge da rein?
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 12.12.07 14:52 
(A) nimm lieber gleich eine Klasse, da kannst Du die Schreib- und Lesezugriffe genau definieren
(B) Wo ist denn in deinem Record ein dynamisches Array?
(C) ein dyn. Array ist keine Liste von Pointern

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 12.12.07 16:38 
a) wollt ich ebn grade nicht. dafür bräcuhte ich dann zusätzlich units etc
b) data ist ein dynamisches array, da die länge erst festgelegt wird, wenn das record beschrieben wird
c) soweit ich weiß doch...zumindest kein zusammenhängender speicherbereich...merkt man beim zugriff über @arrayname und dann den pointer erhöhen...
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 12.12.07 18:52 
(a) ???, dann schreibe die Klasse in die selbe Unit, und wenn Du 1000 Units, dass stört Delphi auch nicht
(b) Data ist bei Dir kein dyn. Array, sondern ein vergewaltigtes stat. Array, dyn. Array sehen so aus:
ausblenden Delphi-Quelltext
1:
Data: array of Byte;					

(c) nö

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 15.12.07 09:56 
Ein dynamisches Array speichert seine Daten aber separat im Heap und im Record ist lediglich der Pointer darauf. Wenn du im record alle Daten (inkl. des Arrays) am Stück haben willst (z.B. für die Kommunikation mit einer externen Library wie von dir angedeutet) musst du ein array[0..0] deklarieren und die nötige Menge Speicher für das record selbst allozieren (siehe GetMem/FreeMem). Range-Checks musst du dann ausschalten. Sowas würde ich aber höchstens in Low-Level-Code machen.

Was du versucht hast oben geht in jedem Fall nicht. Du kannst eine Variable nicht mit der Länge des Arrays verknüpfen.