PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen String einer Sub übergeben



hacker
31.08.2006, 20:06
Hi,

ich hab beispielweise folgendes:

Declare Sub rs232(byval w as string * 10)




sub rs232(byval w as string * 10)

print w;

End sub



jetzt will ich aber auch der sub nicht unbedingt immer einene String mit genau 10 Zeichen übergeben, sondern auch mal mit weniger..

wie geht das?

oe9vfj
31.08.2006, 23:23
Das ist wie bei der Dimensierung einer normalen Variablen. Einen kürzeren String einzuschreiben bzw. zu übergeben ist immer möglich.
In Deinem Beispiel werden 10(+1) Bytes für den String im Frame-Stack beim Aufruf der SUB reserviert. Da kannst Du von einem Leer-String bis zu 10 Zeichen alles übergeben.

hacker
01.09.2006, 13:45
hmmm nahja ok....

Aber das geht auch nichtmal:


$regfile = "m8def.dat"
$crystal = 16000000

Declare Sub Rs232_output(byval Text As String * 10)

Do

Call Rs232_output( "Hallihallo")

Loop
End

Sub Rs232_output(byval Text As String * 10)

Print Text;

End Sub

Kann es sein, dass man einer Sub keine String übergeben kann?! Der Compiler meckert was von "numeric parameter expected"

oe9vfj
01.09.2006, 13:58
Ich habe es mit dem Compiler getestet.
Es scheit tatsächlich so zu sein, dass Strings nur ByRef und nicht ByVal übergeben werden können.
Sofern Du den String aber in der Unterroutine nicht veränderst, kannst Du ihn problemlos mit ByRef übergeben. Ansonsten musst Du den zu übergebenden Wert vorher in eine globale Stringvariable kopieren und diese dann im Aufruf verwenden.

PicNick
01.09.2006, 14:29
Männer, das ist logo.
wenn du schreibst
Call Rs232_output( "Hallihallo")
steht dieser String natürlich im Flash und nicht im Sram. Woher soll das die SUB aber wissen ?
Irgendwer muß das zuerst in den SRAM kopieren.
Entweder Bascom mit "byval" in das Frame
oder Du in eine globale


dim str as string * nn
str = "Dudeldei"
Call Rs232_output(str)


EDIT: pervers isses natürlich, wenn es zweimal kopiert wird


declare rs... (byval string * nn)
dim str as string * nn
str = "Dudeldei"
Call Rs232_output(str)

Dann kopierst du in die Variable und Bascom ins Frame

The_Clown
25.09.2006, 21:14
Hallo

Mit welcher Bascom Version Arbeitet ihr.

Declare Sub rs232(byval w as string * 10)

Diese Art der Eingabe meckert der Compiler bei mir an.

MfG Dirk

lumilux
26.09.2006, 18:43
Hallo Dirk,

lasse mal die String-Länge * 10 weg, also nur so:

Declare Sub Rs232(byval W As String)


MfG Frank

PicNick
26.09.2006, 19:08
Schau mal, das zum Beispiel geht




Declare Sub Show(byval Strng As String)



Call Show( "Dudeldei")


End


Sub Show(byval Strng As String)

Print Strng


End Sub