Seite 1 von 1

Strukturarray an Procedure übergen?

Verfasst: 06.05.2012 17:37
von Toshy
Ich möchte 16 Bytes eines Structurearrays (Dat.b[16]) an eine an eine Procedure übergen. An sich kein Problem, mache ich indirekt durch Pointer ja oft.
Bisher habe ich aber noch kein "statisches" Strukturarry genutzt bzw. an eine Procedure übergeben.
Wie muß ich mich hier beim Aufruf der Procedur und beim einlesen der Daten korrekt verhalten?
Und die Structurearrays nutzen. Bisher hatte ich meißt größere und dynamische Bereiche genutzt und die selbst allokiert.


So wie man ein normales Array übergibt vermutlich nicht (Mit den Schlüsselwort Array).
Normal würde ich ansonsten einfach mit @ beim Aufruf den Pointer zum Speicherbereich übergeben und den dann in der Procedure "übergeben".
Nur wie macht man hier am "schönsten" und vor allem richtig?

Ich habe den Teil irgend wie noch nicht raus gefunden.

Gruß
Toshy

Re: Strukturarray an Procedure übergen?

Verfasst: 06.05.2012 17:49
von NicTheQuick
Ein statisches Array ist nichts anderes als die Aneinanderreihung eines Datentyps mit einer bestimmten Anzahl Einträgen.
Dein 'Dat.b[16]' ist also genau 16 Bytes groß und mit '@Variable\Dat[0]' kriegst du den Pointer auf das erste Element.

Reicht das so? Ansonsten wäre etwas Beispielcode nützlich.

Re: Strukturarray an Procedure übergen?

Verfasst: 06.05.2012 17:52
von ts-soft

Code: Alles auswählen

EnableExplicit

Structure test
  Dat.b[16]
EndStructure

Procedure Foo(*p.test)
  Protected i
  For i = 0 To 15
    Debug *p\Dat[i]
  Next
EndProcedure

Define.test bla
Define i

For i = 0 To 15
  bla\Dat[i] = i
Next

Foo(@bla)
Es macht vom Speicherverbrauch keinen Unterschied, ob ich die Strukture oder nur seinen Member übergebe,
da ja nur der Pointer übergeben wird.

Re: Strukturarray an Procedure übergen?

Verfasst: 06.05.2012 20:18
von Toshy
@NickTheQuick. Wie das strukturarray Daten ablegt weiß ich vom grunde her. Also alles aneinander gereicht. normaler Speicher, nur strukturiert. Einzig bei strings werden nur pointer abgelegt. und das dann diese Strukturen je wohl wie und wo man sie nutzt irgend wie freigegeben werden. ich weiß gerade die Funktion nicht, schon lange nicht mehr drumm gekümmert. mache ich die Tage. Dennoch Danke für den Hinweis.

@ts-soft:
Danke, ja, so habe ich es mir an sich schon vorgestellt. Ich meinte daher ja, das es über Pointer kein so großes Problem ist. Allerdings war ich mir da nicht so 100%ig sicher, ob ich da nicht was falsch mache.
ALLERDINGS, hatte ich "gedacht", daß man es wie bei normalen Arrays machen sollte. Also mit Schlüsselwort oder oder "direkt" (automatisch erkennt).

z.B.

Code: Alles auswählen

Procedure Foo(array p.test)
oder

Code: Alles auswählen

Procedure Foo(p.test)
Ich wollte es wissen, weil es ja hätte sein können, das PB eine Möglichkeit bietet wie bei Listen, Arrays und Maps, die ich übersehen habe. Nur die Strukturen sind ja weder eines von diesen Dingen, noch eine "einfache Variable".
Da ich dann wohl so etwas in der Hilfe und im Board nicht überlesen habe, nutze ich natürlich einfach die Pointer wie aus deinem Beispiel.

Danke an euch Beide. Da ich gerade einen Code komplett neu schreibe und ich mich doch erst mal wieder an einiges erinnern muß sowie einige kleine Neuerungen noch nicht mitbekommen hatte, wollte ich lieber VORHER fragen, als nachher doof zu schauen ;-)
Ihr wart mal wieder so schnell, wie ich gehofft hatte.
Vorhin war ich auf dem Sprung. Zwei Minuten zeit zum tippen, keine Zeit für mein Bespiel mit der Hoffnung jetzt noch ein bissl code schreiben zu können.
Nochmals Danke Danke Danke.
:praise: