
Ich habe deine Proceduren ein bisschen angepasst sodas man beliebig viel Versionen der Liste in einem SC - Container speichern kann und die ganze Liste in einem Eintrag, das ersparte einem eine menge Overhead:
Code: Alles auswählen
Macro _AddStringToMem(_Mem, _String, _SizeCounter)
_Mem = ReAllocateMemory(_Mem, _SizeCounter + StringByteLength(_String) + SizeOf(Character) + SizeOf(Long))
PokeL(_Mem + _SizeCounter, StringByteLength(_String) + SizeOf(Character))
PokeS(_Mem + _SizeCounter + SizeOf(Long), _String)
_SizeCounter + StringByteLength(_String) + SizeOf(Character) + SizeOf(Long)
EndMacro
Macro _AddLongToMem(_Mem, _Long, _SizeCounter)
_Mem = ReAllocateMemory(_Mem, _SizeCounter + SizeOf(Long))
PokeL(_Mem + _SizeCounter, _Long)
_SizeCounter + SizeOf(Long)
EndMacro
Macro _GetStringFromMem(_Mem, _String, _SizeCounter)
_String = PeekS(_Mem + _SizeCounter + SizeOf(Long), PeekL(_Mem + _SizeCounter))
_SizeCounter + SizeOf(Long) + PeekL(_Mem + _SizeCounter)
EndMacro
Macro _GetLongFromMem(_Mem, _Long, _SizeCounter)
_Long = PeekL(_Mem + _SizeCounter)
_SizeCounter + SizeOf(Long)
EndMacro
Procedure SC_SavePersonen(SC, Id$, List Person.sPerson())
Protected *SaveMem, MemSize, ListCount, MainCount = ListSize(Person())
*SaveMem = AllocateMemory(SizeOf(Long))
PokeL(*SaveMem, MainCount)
MemSize = SizeOf(Long)
ForEach Person()
ListCount = ListSize(Person()\Telefon())
_AddStringToMem(*SaveMem, Person()\Vorname, MemSize)
_AddStringToMem(*SaveMem, Person()\Nachname, MemSize)
_AddLongToMem(*SaveMem, ListCount, MemSize)
ForEach Person()\Telefon()
_AddStringToMem(*SaveMem, Person()\Telefon()\Nummer, MemSize)
_AddStringToMem(*SaveMem, Person()\Telefon()\Typ, MemSize)
Next
Next
SC_AddEntry(SC, Id$, *SaveMem, MemSize)
EndProcedure
Procedure SC_LoadPersonen(SC, Id$, List Person.sPerson())
Protected i, ii, *SaveMem, MemSize, ListCount, MainCount
If SC_GetEntry(SC, Id$)
*SaveMem = SC_GetMem(SC)
MainCount = PeekL(*SaveMem)
MemSize = SizeOf(Long)
For i = 1 To MainCount
AddElement(Person())
_GetStringFromMem(*SaveMem, Person()\Vorname, MemSize)
_GetStringFromMem(*SaveMem, Person()\Nachname, MemSize)
_GetLongFromMem(*SaveMem, ListCount, MemSize)
For ii = 1 To ListCount
AddElement(Person()\Telefon())
_GetStringFromMem(*SaveMem, Person()\Telefon()\Nummer, MemSize)
_GetStringFromMem(*SaveMem, Person()\Telefon()\Typ, MemSize)
Next
Next
EndIf
EndProcedure

Gruß, Alex