Ich habe mir eben mal eine ReDim Procedure geschrieben mit der man
Arrays vergrößern oder verkleinern kann.
Vieleicht kann es ja noch jemand hier brauchen.
Der Procedure einfach den Pointer des Arrays, die neue länge und die länge der array felder (nur bei structuren wichtig ansonsten NULL oder 4 übergeben)
Es wird der Pointer auf das neue Array zurückgegeben den einfach dem alten Array zuweisen und vertig.
Kleiner Beispiel code
Code: Alles auswählen
Procedure ReDim(Pointer.l, Len.l, Fieldlen.l)
fLen.l = SizeOf(LONG)
If Fieldlen <> 0 : fLen = Fieldlen : EndIf
Fields.l = PeekL(Pointer - 8)
If Len < Fields
PokeL(Pointer - 8, Len + 1)
ProcedureReturn Pointer
Else
oldArrayLen.l = (Fields * fLen + 8)
newArrayLen.l = (Len * fLen)
newArray = AllocateMemory(newArrayLen + 8)
CopyMemory(Pointer - 8, newArray, oldArrayLen)
PokeL(newArray, newArrayLen)
ProcedureReturn newArray
EndIf
EndProcedure
Structure User
ID.l
Files.l
EndStructure
Dim StructTest.User(0)
StructTest(0)\ID = 1
StructTest(0)\Files = 2000
Debug StructTest(0)\ID
Debug StructTest(0)\Files
StructTest() = ReDim(@StructTest(), 9, 8)
StructTest(0)\ID = 1
StructTest(0)\Files = 91532
StructTest(3)\ID = 4
StructTest(3)\Files = 1010101
StructTest(7)\ID = 8
StructTest(7)\Files = 9000
StructTest(9)\ID = 10
StructTest(9)\Files = 123123
Debug StructTest(0)\ID
Debug StructTest(0)\Files
Debug StructTest(3)\ID
Debug StructTest(3)\Files
Debug StructTest(7)\ID
Debug StructTest(7)\Files
Debug StructTest(9)\ID
Debug StructTest(9)\Files
StructTest() = ReDim(@StructTest(), 3, 8)
Debug StructTest(0)\ID
Debug StructTest(0)\Files
Debug StructTest(3)\ID
Debug StructTest(3)\Files
Ich habs auch mal als UserLib erstellt -> http://www.communityworld.de/redim.zip