logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[BASCOM] string w naglówku funkcji

grafiksaba 15 Sie 2008 23:08 1537 1
  • #1 5442917
    grafiksaba
    Poziom 11  
    witam,

    chcę osiągnąć coś takiego:

    Declare Function Set_by_spi(co As String*10 , Wartosc*40 As String , Procesor As Byte) As Byte
    Dim A As String * 10
    A = "1234567890"
    Dim B As String * 40
    B = "b12345678901234567890"
    Dim C As Byte
    C = 1
    Dim Sesja3 As Byte
    Sesja3 = Set_by_spi(a , B , C)
    do
    loop
    end



    '''tutaj PROBLEM
    
    Function Set_by_spi(co As String *10 , Wartosc As String *40, Procesor As Byte) As Byte
    End function
    



    niestety zgłasza błąd, nie wiem co zrobiłem nie tak, jeśli napiszę tak
    
    Function Set_by_spi(co As String , Wartosc As String, Procesor As Byte) As Byte

    to sie kompiluje ale string wartosc jest pusty nie przekazany do funkcji
  • #2 5443407
    ZbeeGin
    Poziom 39  
    grafiksaba napisał:
    chcę osiągnąć coś takiego:
    Declare Function Set_by_spi(co As String*10 , Wartosc*40 As String , Procesor As Byte) As Byte
    

    A co to za zmienna Wartosc*40 ?

    Poza tym zmiennych w parametrach się nie wymiaruje. Wszystko dlatego, że w przekazywaniu parametrów uczestniczą tylko wskaźniki do zmiennych. Nie użyłeś ByVal więc kompilator przekaże 16-bitowy adres zmiennej co do funkcji. Jeśli funkcja zmodyfikuje zawartość co to zmiana ta będzie widoczna także poza funkcją. Jeśli użyłbyś ByVal to kopia przekazywanej zmiennej trafi do obszaru FrameSpace i funkcji przekazany będzie adres jej kopii - a zmiana nie będzie widoczna. To są podstawowe zasady przekazywania parametrów dla funkcji/procedur.

    Ten program działa poprawnie:
    $regfile = "8515def.dat"
    $crystal = 1000000
    
    Declare Function Set_by_spi(co As String , Wartosc As String , Procesor As Byte) As Byte
    
    Dim A As String * 10
    A = "1234567890"
    Dim B As String * 40
    B = "b12345678901234567890"
    Dim C As Byte
    C = 1
    Dim Sesja3 As Byte
    Sesja3 = Set_by_spi(a , B , C)
    
    Do
    Loop
    
    Function Set_by_spi(co As String , Wartosc As String , Procesor As Byte) As Byte
      Print Co
      Print Wartosc
      Print Procesor
    End Function
REKLAMA