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
Strukturarray an Procedure übergen?
-
Toshy
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Strukturarray an Procedure übergen?
1. Win10
PB6.1
PB6.1
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Strukturarray an Procedure übergen?
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.
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.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Strukturarray an Procedure übergen?
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)da ja nur der Pointer übergeben wird.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
Toshy
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Re: Strukturarray an Procedure übergen?
@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. oder
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.

@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)Code: Alles auswählen
Procedure Foo(p.test)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.
1. Win10
PB6.1
PB6.1