ProcedureReturn

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

ProcedureReturn

Beitrag 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
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ProcedureReturn

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: ProcedureReturn

Beitrag von Pure_Beginner »

Hallo RSBasic,

genau das hatte ich gesucht,

wie gehst du bei der Suche vor ?


besten Dank für deine Mühe
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ProcedureReturn

Beitrag von RSBasic »

Ich habe einfach nach "ProcedureReturn mehrere" gesucht. :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: ProcedureReturn

Beitrag 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!
Benutzeravatar
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: ProcedureReturn

Beitrag 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
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.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: ProcedureReturn

Beitrag 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
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: ProcedureReturn

Beitrag 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
Benutzeravatar
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: ProcedureReturn

Beitrag 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:
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.
Bild
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: ProcedureReturn

Beitrag 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!
Barcodes for PureBasic - http://micha122.bplaced.net/
Antworten