Seite 1 von 2

ProcedureReturn

Verfasst: 09.03.2013 14:01
von Pure_Beginner
Hallo zusammen,

vor längerer Zeit habe ich einen Beiterag gelesen in dem erklärt wurde, wie man mehrere Parameter aus einer Procedure heraus übergeben kann.
Mit ProcedureReturn ist leider nur ein Parameter möglich.

Leider finde ich den Beitrag nicht mehr, weiss einer von euch wo ich noch suchen könnte.

War so glaube ich was mit Zeigern ?


Grüße
Christian

Re: ProcedureReturn

Verfasst: 09.03.2013 14:05
von RSBasic

Re: ProcedureReturn

Verfasst: 09.03.2013 14:09
von Pure_Beginner
Hallo RSBasic,

genau das hatte ich gesucht,

wie gehst du bei der Suche vor ?


besten Dank für deine Mühe

Re: ProcedureReturn

Verfasst: 09.03.2013 14:10
von RSBasic
Ich habe einfach nach "ProcedureReturn mehrere" gesucht. :D

Re: ProcedureReturn

Verfasst: 10.03.2013 20:19
von Micha122
Habe diese Woche endlich mal die Vollversion von PureBasic gekauft und wünsche mir sehr ein Update von ProcedureReturn.
Die Einschränkung von ProcedureReturn, das nur ein Parameter zurück gegeben werden kann nervt wirklich sehr.
Auch würde der Code viel leserlicher, müsste man nicht immer mit "Tricks" arbeiten um auf andere Parameter zurück zu greifen.

Grüße!

Re: ProcedureReturn

Verfasst: 10.03.2013 20:37
von ts-soft
Micha122 hat geschrieben:Die Einschränkung von ProcedureReturn, das nur ein Parameter zurück gegeben werden kann nervt wirklich sehr.
Das wird aber in allen nativen Sprachen so gehändelt, es wird immer nur ein Wert auf EAX oder RAX gelegt :wink:
Sollte es woanders scheinbar anders gehen, so sind das eher interpretierte Sprachen, oder es macht nur
den Anschein es könnte mehrere Werte zurückgeben.
Der "Trick" mit pointer ist standard, auch wenn es manchmal ander heißt, ansonsten wird in den parametern
ByRef, also Adresse zur Variable zurückgegeben, sind auch genug Beispiele hier im Forum.
Das siehste auch, wenn Du Dir mal die WinAPI anschaust, da werden auch Strukturen oder Buffer erwartet,
um in diesen mehr als einen Wert zurückgeben zu können.

Ich denke mal nicht, das sich Dein warten auf ein entsprechendes Update rentieren wird.

Gruß
Thomas

Re: ProcedureReturn

Verfasst: 10.03.2013 20:57
von NicTheQuick
Anstatt irgendwie mehrere werte zurück geben zu können, wäre es aber schön, wenn man als Rückgabetyp auch eine Structure angeben könnte. Immerhin wird das Kopieren von strukturierten Variablen ja auch unterstützt. Dann wäre es doch nur ein kleiner Schritt das auch für Procedures zu erlauben.

Code: Alles auswählen

Structure myStructure
	a.i
	b.s
	c.f
EndStructure

Define var.myStructure
var\a = 1
var\b = "Hello"
var\c = 123.456

Define target.myStructure
target = var	;das Kopieren von strukturierten Variablen geht

Debug "target = " + target\a + ", " + target\b + ", " + target\c

Procedure.myStructure getTest()
	Protected foo.myStructure
	
	foo\a = 2
	foo\b = "World"
	foo\c = 654.321
	
	ProcedureReturn foo
EndProcedure

target = getTest()	;aber strukturierte Variablen als Rückgabewert geht nicht

Debug "target = " + target\a + ", " + target\b + ", " + target\c

Re: ProcedureReturn

Verfasst: 10.03.2013 21:33
von Micha122
@ts-soft
Ich denke mal nicht, das sich Dein warten auf ein entsprechendes Update rentieren wird.
Ich warte darauf ja nicht, aber nerven tut diese "Einschränkung" trotzdem.
Das wird aber in allen nativen Sprachen so gehändelt
Das heisst ja nicht das man das immer so beibehalten muss. Oder spielt da die Kompatiblität zu anderen Sprachen eine Rolle?

@NicTheQuick
Deine Idee finde ich auch nicht schlecht!

Gruß, Michael

Re: ProcedureReturn

Verfasst: 10.03.2013 22:06
von ts-soft
Micha122 hat geschrieben:
Das wird aber in allen nativen Sprachen so gehändelt
Das heisst ja nicht das man das immer so beibehalten muss. Oder spielt da die Kompatiblität zu anderen Sprachen eine Rolle?
Jede DLL, jede Funktion macht es so, denkst Du nicht, es könnte daran liegen, das es technisch gar
nicht anders geht?
Es geht nur mit "Tricksen", PB hat keine besonderen Funktionen zum "Tricksen", aber die finde ich auch
unnötig.

Das Beispiel von NicTheQuick funktioniert ja, wenn man es zum Beispiel so macht:

Code: Alles auswählen

Structure myStructure
  a.i
  b.s
  c.f
EndStructure

Procedure.i getTest()
  Protected *foo.myStructure = AllocateMemory(SizeOf(myStructure))
  
  *foo\a = 2
  *foo\b = "World"
  *foo\c = 654.321
  
  ProcedureReturn *foo
EndProcedure

*target.myStructure = getTest()
Debug *target\a
Debug *target\b
Debug *target\c

FreeMemory(*target)
und die vielen anderen Varianten die noch möglich sind :wink:

Re: ProcedureReturn

Verfasst: 10.03.2013 22:45
von Micha122
@ts-soft
Jede DLL, jede Funktion macht es so, denkst Du nicht, es könnte daran liegen, das es technisch gar
nicht anders geht?
Entschuldigung :o , ich wusste nicht, das ich das funtioniern von dll´s kennen muss um im Anfängerforum eine Frage zu stellen. :roll:


Dein Code- Beispiel gefällt mir sehr gut und werde mal versuchen das so anzuwenden. Ist zumindest einigermassen leserlich und nachvollziebar. :allright:


Grüße!