- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: Variablen String einer Sub übergeben

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    35
    Beiträge
    967

    Variablen String einer Sub übergeben

    Anzeige

    Powerstation Test
    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?
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2004
    Ort
    Hard, Vorarlberg
    Beiträge
    155
    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.
    Viele Grüße
    Josef
    -------------------------------------------------------------------------------------
    DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    35
    Beiträge
    967
    hmmm nahja ok....

    Aber das geht auch nichtmal:

    Code:
    $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"
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2004
    Ort
    Hard, Vorarlberg
    Beiträge
    155
    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.
    Viele Grüße
    Josef
    -------------------------------------------------------------------------------------
    DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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
    Code:
    dim str as string * nn
       str = "Dudeldei"
       Call Rs232_output(str)
    EDIT: pervers isses natürlich, wenn es zweimal kopiert wird
    Code:
    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
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2006
    Beiträge
    10
    Hallo Dirk,

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

    Declare Sub Rs232(byval W As String)


    MfG Frank

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Schau mal, das zum Beispiel geht

    Code:
    Declare Sub Show(byval Strng As String)
    
    
    
       Call Show( "Dudeldei")
    
    
    End
    
    
    Sub Show(byval Strng As String)
    
       Print Strng
    
    
    End Sub
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress