DELETE
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
DELETE
~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:52, insgesamt 1-mal geändert.
~ DELETE ~
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:51, insgesamt 1-mal geändert.
~ DELETE ~
Re: Serializable?
Ohai,
Für jede Struktur eine Funktion StreamTheStructure() schreiben, welche die Größe der Daten errechnet, ein Buffer mit dieser Größe erstellt, die Daten aus der Struktur dort rein schreibt, inklusive verlinkte Daten (Strings, Buffer, ...), dieser wieder Relativ innerhalb des Buffers verlinkt und dann die Adresse des Buffers zurück gibt:
mfg
_sivizius
Für jede Struktur eine Funktion StreamTheStructure() schreiben, welche die Größe der Daten errechnet, ein Buffer mit dieser Größe erstellt, die Daten aus der Struktur dort rein schreibt, inklusive verlinkte Daten (Strings, Buffer, ...), dieser wieder Relativ innerhalb des Buffers verlinkt und dann die Adresse des Buffers zurück gibt:
Code: Alles auswählen
Structure didum
einLong.l
einString$
*einPointer
*lenPointer
EndStructure
Structure StreamDidum
einLong.l
einString.l
einPointer.l
lenPointer.l
EndStructure
Procedure StreamTheStructure(*self.didum)
lenString = StringByteLength(*self\einString$) + 2
size = SizeOf(StreamDidum) + lenString + *self\lenPointer
*output.StreamDidum = AllocateMemory(size)
*output\einLong = *self\einLong
*output\einString = SizeOf(StreamDidum)
*output\einPointer = SizeOf(StreamDidum) + lenString
*output\lenPointer = *self\lenPointer
PokeS(*output + SizeOf(StreamDidum), *self\einString$)
If *self\lenPointer
CopyMemory(*self\einPointer, *output + SizeOf(StreamDidum) + lenString, *self\lenPointer)
EndIf
ProcedureReturn *output
EndProcedure
*self.didum = AllocateMemory(SizeOf(didum))
*self\einLong = 2342
*self\einString$ = "Hallo Welt!"
*self\einPointer = AllocateMemory(8)
RandomData(*self\einPointer, 8)
Debug RSet(Hex(PeekQ(*self\einPointer)), 16, "0")
*self\lenPointer = 8
Debug "== Stream =="
*this.StreamDidum = StreamTheStructure(*self.didum)
Debug *this\einLong
Debug PeekS(*this + *this\einString)
Debug RSet(Hex(PeekQ(*this + *this\einPointer)), 16, "0")
Debug *this\lenPointer
Debug MemorySize(*this)
_sivizius