Seite 1 von 1
Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 00:49
von Delle
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
Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 00:57
von STARGÅTE
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:
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
Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 01:00
von ts-soft
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
Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 10:56
von matbal
@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?
Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 11:16
von ts-soft
matbal hat geschrieben:1. Was bewirkt die esten Zeile in der Procedure?
Die ist besonders wichtig

, einfach ignorieren, gehört nicht dazu.
matbal hat geschrieben:
2. Warum kann man den String poken? Es wurde doch nirgends Speicher reserviert. Oder übersehe ich etwas?
Okay, das ist nicht in Ordnung so.
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
So gibt es keine Probleme

Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 12:17
von matbal
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.
Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 12:48
von ts-soft
matbal hat geschrieben:Probleme hatte ich mit deinem ersten Code auch nicht (unter WinXP).
Dann füge mal:
ein und schalte den Purifier an, dann siehste, das der erste
Code nicht korrekt war

Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 13:27
von Falko
@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
Re: Mehrere Rückgabewerte für Prozedure?
Verfasst: 02.03.2012 14:27
von ts-soft
Ich verwende selber eher Strukturen, wie STARGÅTEs Beispiel zeigt, kann man weniger Fehler mit Strings machen
Aber wegen der Komplettnes ...