Seite 1 von 2
Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 19:55
von ProgOldie
Hallo,
ich habe offenbar momentan ein Brett vor dem Kopf, denn ich sitze an einem gerade lächerlichen Problem.
Code: Alles auswählen
Define x.i,y.s,z.i
Procedure test(a,b.s,c.i)
a=15
b="Teststring"
c=19
EndProcedure
x=5
y="abc"
z=9
test(x,y,z)
Debug Str(x)+#LF$+y+#LF$+Str(z)
Wie erreiche ich es, dass bei Debug die Werte 15, "Teststring" und 19 ausgegeben werden?
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 19:58
von man-in-black
Hi,
du musst in dem Fall mir Pointern auf x,y,z arbeiten:
Code: Alles auswählen
Procedure test(*a,*b,*c)
*a=15
*b="Teststring" ;nat. pokes und so weiter ...
*c=19
EndProcedure
test(@x,@y,@z)
MFG
MIB
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:04
von ProgOldie
Code: Alles auswählen
Procedure test(*a,*b.s,*c.i)
*a=15
*b="Teststring"
*c=19
EndProcedure
test(@x,@y,@z)
Das kann's aber nicht sein, das habe ich auch schon probiert.
Auf jeden Fall müssen im Prozeduraufruf die Typdeklarationen weg.
Code: Alles auswählen
Define x.i,y.s,z.i
Procedure test(*a,*b,*c)
*a=15
*b="Teststring"
*c=19
EndProcedure
x=5
y="abc"
z=9
test(@x,@y,@z)
Debug Str(x)+#LF$+y+#LF$+Str(z)
Aber auch das hilft nichts, denn mit Strings geht das offenbar nicht so einfach.
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:06
von man-in-black
Hi,
ich war etwas schreibfaul. Du musst nat. poke statt = nutzen (habs eigentlich dazu geschrieben):
Code: Alles auswählen
Define x.i,y.s,z.i
Procedure test(*a,*b,*c)
PokeI(*a,15)
PokeS(*b,"Teststring")
PokeI(*c,19)
EndProcedure
x=5
y="abc"
z=9
test(@x,@y,@z)
Debug Str(x)+#LF$+y+#LF$+Str(z)
MFG
MIB
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:15
von ProgOldie
Sorry, aber auch das funktioniert zwar mit den Integers, nicht aber mit dem String, den es wird dafür so etwas ausgegeben wie
Teststri킝㾑
Auch mit dem Unicodeparameter in PokeS habe ich es schon ohne Erfolg probiert.
P.S.: Ich verwende PB 5.60
Edit: Es ist eigentlich kein Wunder, dass nur ein Teil des Strings korrekt zurückgegeben wird. Das liegt sicher an der unterschiedlichen Zeichenzahl je nachdem, ob ASCII oder UTF-8 oder Unicode. In der Hilfe steht, dass man in der Prozedur dann eine Kombination aus PeekS( Ermittlung der korrekten Zeichenzahl) und PokeS verwenden muss.
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:20
von Demivec
Code: Alles auswählen
Define x.i, y.String, z.i
Procedure test(*a.Integer, *b.String, *c.Integer)
*a\i = 15
*b\s = "Teststring"
*c\i = 19
EndProcedure
x = 5
y\s = "abc"
z = 9
test(@x, @y, @z)
Debug Str(x) + #LF$ + y\s + #LF$ + Str(z)
@Edit: gelöschte Zeile Protected *b2.String, es ist überflüssig.
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:22
von ProgOldie
Danke Demivec, damit klappt's.
Edit: Protected *b2.String ist überflüssig.
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:23
von man-in-black
Hi,
kann ich so nicht bestätigen - PB5.60 x64.
Das wird auch nicht an Unicode vs ... liegen, da die "normalen" Zeichen geteilt werden.
Probiers einfach mal ohne die Debugausgabe:
MFG
MIB
Re: Parameterübergabe an Prozeduren
Verfasst: 24.09.2017 20:52
von ts-soft
man-in-black hat geschrieben:
y\s, y\s
Re: Parameterübergabe an Prozeduren
Verfasst: 25.09.2017 00:49
von NicTheQuick
Ich würde es ja gleich mit einer großen Struktur machen. Es sei denn, dass ist nicht so gedacht:
Code: Alles auswählen
Structure bar
a.i
b.s
c.i
EndStructure
Procedure test(*foo.bar)
With *foo
\a = 15
\b = "Teststring"
\c = 19
EndWith
EndProcedure
Define foo.bar
foo\a = 5
foo\b = "abc"
foo\c = 9
test(foo)
Debug "" + foo\a + #LF$ + foo\b + #LF$ + foo\c