Seite 1 von 2
String Array Pointer
Verfasst: 24.05.2007 08:58
von hmi222
Hallo zusammen
Hab mal ne Frage zu nem String Pointer.
Würde gerne ein String array an eine Prozedur übergeben...
In der Prozedur möchte ich dann den Inhalt des String arrays
per PeekS() aus lesen...
Wenn ich die Pointer der einzelnen Arrayelemente übergebe ist ok, aber mit dem ganzen Array Krieg ich es leider nicht so ganz hin.
Vielen Dank im vorraus
Verfasst: 24.05.2007 10:09
von real
PeekS macht nichts anderes, als einen Speicherbereich vom Startpointer bis zum stringterminierenden \0 zurueckzugeben. Jeder String im Array hat seinen eigenen Speicherbereich und somit Startpointer. Du kannst also nicht einfach ein komplettes Array ausgeben, sondern nur die Elemente selbst (wie Du ja schon festgestellt hast).
Verfasst: 24.05.2007 11:02
von Kaeru Gaman
im array selber stehen die stringpointer.
du kannst also den pointer zum array übergeben,
und in der proc kannst du aus dem ziel des arraypointers den stringpointer lesen
und von dort holst du den string mit PeekS.
dann erhöhst du den Arraypointer um 4, um dir den nächsten stringpointer holen zu können.
das ganze natürlich nur so oft, wie elemente vorhanden sind.
Verfasst: 24.05.2007 12:24
von hmi222
also im @StringPointer
steht die adresse des 1.elementes
im @StringPointer+4
steht die adresse des 2.elementes
...
Hab ich das so richtig verstanden?
Verfasst: 24.05.2007 14:03
von Leonhard
So hab ich das immer gehandhabt:
Code: Alles auswählen
; Autor: leo.tiger ALIAS 'leonhard' + Schick
;/ Array-Macros für Arrays mit
Macro NewArray(StructureName, Elements)
AllocateMemory(SizeOf(StructureName)*(Elements+1))
EndMacro
Macro FreeArray(ArrayPointer)
FreeMemory(ArrayPointer)
EndMacro
Macro GetArrayElement(ArrayPointer, StructureName, Element)
ArrayPointer+(SizeOf(StructureName)*Element)
EndMacro
Dim Array.s(3)
Array(0) = "Hallo"
Array(1) = ","
Array(2) = "Welt"
Array(3) = "!"
Procedure.s GetArrayItem(*Array, Element)
Protected *Element.String = GetArrayElement(*Array, String, Element)
ProcedureReturn *Element\s
EndProcedure
Define i.l
For i = 0 To 3
Debug GetArrayItem(@Array(), i)
Next i
Ich hoffe, das hilft dir.
Mfg
leonhard
Verfasst: 24.05.2007 16:11
von hmi222
Danke leonhard...
werd's gleich testen!
Verfasst: 24.05.2007 16:15
von hmi222
Genau das was ich brauchte....
DANKE

Verfasst: 24.05.2007 20:59
von hjbremer
Warum so kompliziert ?
Code: Alles auswählen
Dim Array.s(3)
Array(0) = "Hallo"
Array(1) = ","
Array(2) = "Welt"
Array(3) = "!"
Procedure.s GetArrayItem(feld$(1), Element) ;oder auch feld.s(1), Element
ProcedureReturn feld$(element) ;oder auch feld.s(Element) ist egal
EndProcedure
Define i.l
For i = 0 To 3
Debug GetArrayItem(Array.s(), i)
Next i
Verfasst: 24.05.2007 21:00
von Leonhard
Für dich eventuell Kompliziert. Ist aber schneller!
Verfasst: 24.05.2007 21:02
von Kaeru Gaman
> Warum so kompliziert ?
weil die frage nunmal war, wie man ein stringarray übergibt, und nicht, wie man eine procedur x-mal aufruft.