DELETE

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

DELETE

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:52, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Serializable?

Beitrag von Kiffi »

CodeCommander hat geschrieben:In PB möglich?
Ja
a²+b²=mc²
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:51, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Serializable?

Beitrag von _sivizius »

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:

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)
mfg
_sivizius
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Serializable?

Beitrag von edel »

Mit JSON.
Antworten