Hatte ich mal zur Demonstration geschrieben:
Code:
$Regfile = "m32def.dat"
$Crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 24
Const ArSz = 5
Dim Ar(ArSz) As Byte
Dim Sz As Byte
Dim Rslt As Word
Declare Function Addall(ArToAdd As Byte , ByVal ArSize As Byte) As Word
Ar(1) = 10
Ar(2) = 25
Ar(3) = 9
Ar(4) = 21
Ar(5) = 66
Rslt = Addall(Ar(1) , ArSz)
Print Rslt
End
Function Addall(ArToAdd As Byte , ByVal ArSize As Byte) As Word
Local idx As Byte
Local rt As Word
rt = 0
For idx = 1 to ArSz
rt = rt + ArToAdd(idx)
Next
Addall = rt
End Function
Du darfst nicht byval übergeben, sondern byref, das ist Standard und muss nicht extra dazu geschrieben werden.
Byref ist einen Zeiger und für den Zugriff auf's ganze Array muss der auf das erste Arrayelement zeigen, deswegen Addall(Ar(1) , ArSz).
Eine implizite Übergabe per byval is soweit ich weiß nicht vorgesehen, so wie Dein Code aussieht auch nicht nötig. Du kannst ohne Weiteres mit dem Originalarray arbeiten, solange es durch die aufgerufene Routine nicht ungewollt verändert wird.
Lesezeichen