Seite 1 von 1

Was mache ich Falsch?Oder Bug!

Verfasst: 08.06.2006 01:38
von Nighthawk
Hallo,

ich brauche mehrere Rückgabewerte aus einer Funktion,beim probieren
bin ich über folgendes gestolpert


EnableExplicit
Define mytest.s=""

Procedure TestString(*test.s)

*test="Teststring"

EndProcedure

;Erster Aufruf der Funktion ergibt nur Müll
TestString(@mytest)
Debug mytest

;Zweiter Aufruf ist korekt
TestString(@mytest)
Debug mytest


Hab ich nun was übersehen oder geht sowas nicht mit PB?

Gruß
Nighthawk

Verfasst: 08.06.2006 01:54
von mk-soft
Strukture für Ergebnis übergeben.

Code: Alles auswählen

Structure udtResult
  value1.l
  value2.l
  value3.l
EndStructure

Procedure test(value.l, *Result.udtResult)

  With *Result
    \value1 = value * 10
    \value2 = value * 20
    \value3 = value * 30
  EndWith
  
EndProcedure

Result.udtresult

test(5, Result)

Debug Result\value1
Debug Result\value2
Debug Result\value3
FF :wink:

Verfasst: 08.06.2006 09:14
von DarkDragon
Also der String ist ja erstmal leer, d.h. länge 1 im Speicher. Desshalb musst du ihn erstmal durch Space(gewünschteMaximallänge) initialisieren.

Code: Alles auswählen

EnableExplicit
Define mytest.s=Space(1024)

Procedure TestString(*test.STRING)

*test\s="Teststring"

EndProcedure

;Erster Aufruf der Funktion ergibt nur Müll
TestString(@mytest)
Debug mytest

;Zweiter Aufruf ist korekt
TestString(@mytest)
Debug mytest
So dürfte es funktionieren, tut es aber auch nicht. Warum ein "Invalid Memory Access" kommt verstehe ich hier nun wirklich nicht.

Verfasst: 08.06.2006 10:37
von real
Bei Pointern und Speicherzugriffen würde ich immer mit den entsprechenden Poke-Befehlen arbeiten. Das sichert in diesem Fall ab, dass der richtige String an die richtige Speicheradresse geschrieben wird und das Ende des dort abgelegten Strings sauber nullterminiert wird.

Code: Alles auswählen

EnableExplicit 
Define mytest.s="" 

Procedure TestString(*test) 
  PokeS(*test,"Teststring")
EndProcedure 

;Erster Aufruf der Funktion ergibt nur Müll 
TestString(@mytest) 
Debug mytest 

;Zweiter Aufruf ist korekt 
TestString(@mytest) 
Debug mytest

Verfasst: 08.06.2006 10:55
von ts-soft
etwas simpler, wobei die stringlänge begrenzt ist:

Code: Alles auswählen

EnableExplicit
Define mytest.s{100}

Procedure TestString(*test.s)

*test="Teststring"

EndProcedure

;Erster Aufruf der Funktion ergibt nur Müll
TestString(@mytest)
Debug mytest

;Zweiter Aufruf ist korekt
TestString(@mytest)
Debug mytest 
hab nur das Define geändert auf FixString

Verfasst: 09.06.2006 02:10
von Nighthawk
Hallo,an alle!

Vielen Dank für die schnelle Hilfe.

Gruß
Nighthawk