Deutsch
Forum

Mehrere Return Werte

 
- Seite 1 -



Hubert
Binnewies
Hallo zusammen..

Kleines Problem..
Ich würde mir gerne ein paar Funktionen schreiben die mir das Programmieren an meinem derzeitigen Projekt vereinfachen.
Das Blöde ist nur das ich in den meisten Funktionen mehrere Rückgabewerte habe.

Ich hab die Hilfe in Xprofan durch und immer nur gesehen das man mit RETURN nur einen Wert zurück geben kann.

Oder hab ich da was übersehen?

Wie kann ich mehrere Werte zurückgeben?

Danke schonmal im voraus.

Hubert
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
15.09.2006  
 



 
- Seite 1 -


Hab hier noch ein Beispiel, ohne jegliche globale Variable. Simuliertes byRef
KompilierenMarkierenSeparieren
Struct Long = l&

Proc Test1

    parameters a1&, a2&
    Declare B#
    Dim B#, Long
    B# = a1&
    B#.l& = 50  50 in c& von Test2 schreiben
    B# = a2&
    B#.l& = 100  100 in d& von Test2 schreiben
    Dispose B#  lokale Bereichsvariable wird nicht mehr gebraucht

EndProc

Proc Test2

    Declare c&, d&
    Test1 Addr(c&), Addr(d&)
    print "Wert von c& = " + Str$(c&) + "  d& = " + Str$(d&) + " in der Proc"

EndProc

Declare c&, d&
cls
Test2
Print
Print "Globales c& = " + Str$(c&) + "  Globales d& = " + Str$(d&) + " wurden nicht verändert!"
waitkey

Proc Test2 über gibt den Pointer von c& und d& an Proc Test1, welche dort 50 und 100 als Rückgabe einträgt. Wie man siehst, keine globalen Variablen und der Bereich wird auch gleich disposed

Hoffe mal, das kann jemand gebrauchen

// Nachtrag:
hab den Code noch etwas erweitert, damit man sieht, das es wirklich geht

Hier nochmal ohne Hilfsstructur, hab ich garnicht dran gedacht, das es in Profan auch so geht:
KompilierenMarkierenSeparieren
Proc Test1

    parameters a1&, a2&
    Declare B#
    Dim B#,4
    B# = a1&
    Long B#,0 = 50  50 in c& von Test2 schreiben
    B# = a2&
    Long B#,0 = 100  100 in d& von Test2 schreiben
    Dispose B#  lokale Bereichsvariable wird nicht mehr gebraucht

EndProc

Proc Test2

    Declare c&, d&
    Test1 Addr(c&), Addr(d&)
    print "Wert von c& = " + Str$(c&) + "  d& = " + Str$(d&) + " in der Proc"

EndProc

Declare c&, d&
c& = 1
d& = 1
cls
Test2
Print
Print "Globales c& = " + Str$(c&) + "  Globales d& = " + Str$(d&) + " wurden nicht verändert!"
waitkey

Ist vielleicht verständlicher
 
15.09.2006  
 



Weils so schön ist, noch die einfachste Variante (hab damit leider bisher zu wenig gemacht )
KompilierenMarkierenSeparieren
Proc Test1

    parameters a1&, a2&
    Long a1&,0 = 50
    Long a2&,0 = 100

EndProc

Proc Test2

    Declare c&, d&
    Test1 Addr(c&), Addr(d&)
    print "Wert von c& = " + Str$(c&) + "  d& = " + Str$(d&) + " in der Proc"

EndProc

Declare c&, d&
c& = 1
d& = 1
cls
Test2
Print
Print "Globales c& = " + Str$(c&) + "  Globales d& = " + Str$(d&) + " wurden nicht verändert!"
waitkey
 
15.09.2006  
 



Ähem - Du änderst doch nix weiter als den Wert von globalen Variablen - und das auch noch umständlich.
 
15.09.2006  
 



[quote:a6584bda33=iF]Ähem - Du änderst doch nix weiter als den Wert von globalen Variablen - und das auch noch umständlich. [/quote:a6584bda33]
Die Variablen in beiden Proc sind lokal, Proc Test1 ändert die Variablen von Test2, Gleichnamige Globale Variablen bleiben auch erhalten. Funktioniert so allerdings nicht mit Strings. Globale Variablen werden nicht geändert

Ich übergebe den Pointer und mache einen profanischen Poke
 
15.09.2006  
 



Ne quatsch - Du deklarierst zwei Globale - die änderst Du in der Proc - mehr nicht. Dein Code geht nicht ohne Globals die Du nutzt.

Oder stehe ich aufm Schlauch?
 
15.09.2006  
 



[quote:869f8d550b=iF]Ne quatsch - Du deklarierst zwei Globale - die änderst Du in der Proc - mehr nicht. Dein Code geht nicht ohne Globals die Du nutzt.

Oder stehe ich aufm Schlauch? [/quote:869f8d550b]
Bei mir gehts::
KompilierenMarkierenSeparieren
Proc Test1

    parameters a1&, a2&
    Long a1&,0 = 50
    Long a2&,0 = 100

EndProc

Proc Test2

    Declare c&, d&
    Test1 Addr(c&), Addr(d&)
    print "Wert von c& = " + Str$(c&) + "  d& = " + Str$(d&)

EndProc

Test2
waitkey

Hab die globalen Variablen ja nur zum Beweis dazugepackt, das diese nicht geändert werden, jetzt denkst gleich wieder verkehrt herum
 
15.09.2006  
 



Ach jetzt! Klar! Hab das Declare in der zweiten Proc übersehen!

Thomas will sagen, einfache die Adressen der Variablen an eine Proc übergeben, und die Variableninhalte per Long ändern.
 
15.09.2006  
 




Hubert
Binnewies
ööööööhmmmmmm.....

und wenn ich keine numerischen Werte sondern Strings habe??

(nicht schlecht die Lösung, kann ich gebrauchen)

Gruß Hubert
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
15.09.2006  
 




Rolf
Koch
Nur zur Erweiterung:
Seit Ewigkeiten schlummert unter eigene Codes folgenders auf meiner Seite
Mehr als einen Parameter aus einer Prozedur zurückliefern - Neu (19.03.2003)

Man sollte auch mal auf meiner Seite kucken *lol*
 
15.09.2006  
 



 
- Seite 2 -



Frank
Abbing
[quote:caee46f7de]und wenn ich keine numerischen Werte sondern Strings habe??[/quote:caee46f7de]
Setzt du Zeiger auf Strings.
Die Listview.dll benutzt schon seit langer Zeit für einige Funktionen die Technik, die Thomas gepost hat. Addressen von Variablen als Parameter. Allerhand APIs machen es genauso, z.B. OpenGL-APIs.
 
15.09.2006  
 



Ich denke mal für longs ist das mit den Pointern schon Ideal, für strings ist das nachträglich auseinandernehmen, so wie auf Rolf seiner Seite, bzw. von Roland angesprochen der einfachste Weg.

Ich persönlich mag nämlich nicht allzu gerne zuviele globale Variablen, vor allem in grösseren Projekten ist das manchmal verhängnisvoll

Aber im Endeffekt, zählt der Erfolg
 
15.09.2006  
 




Frank
Abbing
Richtig. Ich denke auch, für Texte sind Bereiche/Strukturen am besten geeignet.
 
15.09.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.152 Betrachtungen

Unbenanntvor 0 min.
Normann Strübli05.02.2023
H.Brill05.11.2022
RudiB.25.04.2021
Michael W.16.08.2017
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie