Mehrere Rückgabewerte für Prozedure?
Mehrere Rückgabewerte für Prozedure?
Hallo,
wie kann man aus einer Prozedure heraus mehrere Werte zurückgeben?
Global Werte nehmen?
Oder mit Trenner alles in einen String schreiben, zurückgegeben und dann auswerten?
Danke,
Delle
wie kann man aus einer Prozedure heraus mehrere Werte zurückgeben?
Global Werte nehmen?
Oder mit Trenner alles in einen String schreiben, zurückgegeben und dann auswerten?
Danke,
Delle
PB 6.21 | Win 11
Re: Mehrere Rückgabewerte für Prozedure?
Wurde schon mehrfach im Forum gezeigt:
Direkt geht das nicht, aber du kannst als ersten Parameter einen Zeiger zu einer Struktur übergeben in die das Resultat geschrieben werden soll:
Direkt geht das nicht, aber du kannst als ersten Parameter einen Zeiger zu einer Struktur übergeben in die das Resultat geschrieben werden soll:
Code: Alles auswählen
Structure Result
Integer.i
String.s
Float.f
EndStructure
Procedure Beispiel(*Result.Result, Parameter.i)
*Result\Float = Parameter * 0.01
*Result\String = "Zahl "+Str(Parameter)
*Result\Integer = Parameter * 100
EndProcedure
Define Result.Result
Beispiel(@Result, 7)
Debug Result\Float
Debug Result\String
Debug Result\Integer
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- 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: Mehrere Rückgabewerte für Prozedure?
Code: Alles auswählen
EnableExplicit
Procedure bla(*a.Integer, *b.Integer, *c)
Define *strRes.String = @*c
*a\i = 100
*b\i = 200
PokeS(*c, "300")
EndProcedure
Define a, b, c.s = "" ; wichtig: den String einen Initialisieren!!
bla(@a, @b, @c)
Debug a
Debug b
Debug c
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.

Re: Mehrere Rückgabewerte für Prozedure?
@ts-soft
Warum funktioniert auch sie Rückgabe des Strings in deiner Procedure? Ich habe die Funktionsweise der Stringverwaltung in PureBasic noch nicht richtig durchschaut...
Zwei Fragen speziell zu deine Procedure:
1. Was bewirkt die esten Zeile in der Procedure?
2. Warum kann man den String poken? Es wurde doch nirgends Speicher reserviert. Oder übersehe ich etwas?
Warum funktioniert auch sie Rückgabe des Strings in deiner Procedure? Ich habe die Funktionsweise der Stringverwaltung in PureBasic noch nicht richtig durchschaut...
Zwei Fragen speziell zu deine Procedure:
1. Was bewirkt die esten Zeile in der Procedure?
Code: Alles auswählen
Define *strRes.String = @*c
Code: Alles auswählen
PokeS(*c, "300")
- 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: Mehrere Rückgabewerte für Prozedure?
Die ist besonders wichtigmatbal hat geschrieben:1. Was bewirkt die esten Zeile in der Procedure?Code: Alles auswählen
Define *strRes.String = @*c

Okay, das ist nicht in Ordnung so.matbal hat geschrieben: 2. Warum kann man den String poken? Es wurde doch nirgends Speicher reserviert. Oder übersehe ich etwas?Code: Alles auswählen
PokeS(*c, "300")
Code: Alles auswählen
EnableExplicit
Procedure bla(*a.Integer, *b.Integer, *c.String)
*a\i = 100
*b\i = 200
*c\s = "300"
EndProcedure
Define a, b, c.String
bla(@a, @b, @c)
Debug a
Debug b
Debug c\s

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.

Re: Mehrere Rückgabewerte für Prozedure?
Probleme hatte ich mit deinem ersten Code auch nicht (unter WinXP).
Ich hatte mich eben nur gewundert, daß es so funktioniert hat....
Das würde aber bedeuten, daß schon der Leerstring mehr Speicher bekommen hat, als er braucht.
Ich hatte mich eben nur gewundert, daß es so funktioniert hat....
Das würde aber bedeuten, daß schon der Leerstring mehr Speicher bekommen hat, als er braucht.
- 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: Mehrere Rückgabewerte für Prozedure?
Dann füge mal:matbal hat geschrieben:Probleme hatte ich mit deinem ersten Code auch nicht (unter WinXP).
Code: Alles auswählen
PurifierGranularity(1,1,1,1)
Code nicht korrekt war

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.

- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: Mehrere Rückgabewerte für Prozedure?
@ts-soft
Schönes Beispiel mit den zwei (in Pb eigenen) Structuren direkt in der Procedure.
Zuerst war ich irritiert, aber nun habe auch ich das auch verstanden,
nachdem du den zweiten Code rein gestellt hast.
Gruß,
Falko
Schönes Beispiel mit den zwei (in Pb eigenen) Structuren direkt in der Procedure.
Zuerst war ich irritiert, aber nun habe auch ich das auch verstanden,
nachdem du den zweiten Code rein gestellt hast.


Gruß,
Falko
- 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: Mehrere Rückgabewerte für Prozedure?
Ich verwende selber eher Strukturen, wie STARGÅTEs Beispiel zeigt, kann man weniger Fehler mit Strings machen
Aber wegen der Komplettnes ...

Aber wegen der Komplettnes ...
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.
