Sida 1 av 1

MikroBasic-fel. Uppstod när jag uppgraderade.

Postat: 28 december 2006, 22:55:42
av JimmyAndersson
Har precis uppgraderat från v2.0.2 till v5 av MikroBasic.

I den gamla versionen fungerar koden perfekt, men med den nya versionen får jag ett felmedelande på den här raden:

sub procedure lcd_variabel(dim value_b as string[4], dim rs_bit_b, var1_b, var2_b as byte)

Felmeddelandet lyder:
"320:51 E-43 Array parameter must be passed by reference TFTUVbox.pbas"

Jag förstår inte:
A) Varför felet bara finns i den här versionen.
B) Vad felmeddelandet exakt betyder och hur jag löser problemet.


Jag kan ha fel, men jag tror inte att det skulle hjälpa om jag postar hela koden eftersom jag får felmeddelandet trots att jag plockat bort allt som använder sig av den proceduren.

Hela proceduren ser iallafall ut såhär:

Kod: Markera allt

sub procedure lcd_variabel(dim value_b as string[4], dim rs_bit_b, var1_b, var2_b as byte)
    'Gör så att man kan skicka variabeldata till displayen.

    'Skicka data om vilken position som texten ska skrivas ut på.
    if rs_bit_b = 3 then
      RS = 0 ' Instruktionsläge
      LATA = var1_b
      lcd_vanta
      LATA = var2_b
      lcd_vanta
      RS = 1 ' Teckenläge
      rs_bit = 1 ' För att resten ska flyta på som om man haft rs_bit = 1 från början.
    end if

    antal = length(value_b)
    for tecken = 0 to antal
      skriv = value_b[tecken]
      lcd_skriv(skriv, rs_bit, var1_b, var2_b)
    next tecken
end sub

Någon som har en idé?

Postat: 28 december 2006, 23:17:22
av sodjan
Att "arrays" ska skickas "by reference" är väl i sig ganska normalt (oavsett språk).
Varför det fungerade förrut har jag ingen aning om.

Se även (berör i och för sig mikropascal, men med samma fel) :
http://www.mikroe.com/forum/viewtopic.p ... db831ffc31

> B) Vad felmeddelandet exakt betyder....

Vad menar du med det ?
"Array parameter must be passed by reference" är ganska självförklarande.
Du kan alltså inte skicka hela arrayen direkt till funktionen, utan ska skicka
en "pekare" (heter inte så i alla språk men är i princip samma sak).

Postat: 28 december 2006, 23:27:46
av Johan_46
Prova med


antal = length(value_b)
for tecken = 0 to antal
skriv = value_b.tecken
lcd_skriv(skriv, rs_bit, var1_b, var2_b)
next tecken
end sub

Postat: 28 december 2006, 23:32:12
av JimmyAndersson
Nu hänger jag med. Ändrade till:

sub procedure lcd_variabel(dim byref value_b as string[4], dim rs_bit_b, var1_b, var2_b as byte)

och då fungerade det.

Postat: 29 december 2006, 00:10:37
av sodjan
Japp. "byref" och "by reference" kan man ju lätt koppla ihop... :-)