# Array in einer Funktion uebergeben



## Nud3l (5. September 2008)

Hi

ich moechte gerne in einer Funktion eine Array uebergeben was ich dann spaeter bearbeite

bis jetzt  sieht es so aus und er meckert bei Call warum? wie muss ich das den deklarieren damit er nicht meckert?

achja ich benutze VB6

dim array(49)


array wird gefuellt

Call bla(array())



Private Function bla(ar() As Long)
    ar(1)........

End Function


----------



## Zvoni (5. September 2008)

Die Übergabe eines Arrays erfolgt mit Übergabe des ersten Elements

Call bla(arr(0))


----------



## Nud3l (5. September 2008)

irgendwie geht das trozdem nicht 

Fehler Type mismatch array or user-defined type expected


----------



## ronaldh (5. September 2008)

Hallo,

es liegt vermutlich daran, dass Du dem Array  nicht mitteilst, wie es definiert ist, in der Parameterliste der Sub dann aber das Array als Long zuweist. Daher der Type Mismatch.

Im Übrigen übergibt man in VB6 keineswegs das erste Element (dann würde man nur das ERSTE Element, jedoch nicht das gesamte Array übergeben. 

In jedem Fall funktioniert Folgendes (habe ich sogar zur Sicherheit nochmal ausprobiert):


```
Sub Test1()
   Dim i As Integer
   Dim TestA(0 To 100) As Long
   For i = 0 To 100
      TestA(i) = i
   Next
   Call Test2(TestA)
End Sub

Sub Test2(TestA() As Long)
   '
   Debug.Print TestA(1)
End Sub
```

Grüsse
ronaldh


----------



## Zvoni (5. September 2008)

ronaldh hat gesagt.:


> Im Übrigen übergibt man in VB6 keineswegs das erste Element (dann würde man nur das ERSTE Element, jedoch nicht das gesamte Array übergeben.



Huh? Mein Verständnis war, dass ein Array eine Auflistung von Zeigern ist, und das mit der Übergabe des ersten Elements, das empfangende Array dann weiss, dass der Zeiger zum nächsten Element 4 Bytes weiter sitzt usw.


----------



## Zvoni (5. September 2008)

Nachtrag: Ich entschuldige mich für die eventuelle Verwirrung, die ich verursacht habe.

Ron hat natürlich recht mit seiner Aussage, wie Arrays in VB an eine Funktion übergeben werden.

Da ich Bruce McKinney's TypeLib verwende, ist die Win-API für mich wie ein normaler Teil von VB. Ich habe dadurch beide Ansätze durcheinander gebracht.

Bei der Übergabe eines Arrays aus VB heraus an die Windows-API wird das erste Element eines Arrays übergeben, da die empfangende Win-API-Funktion eben einen Zeiger auf das erste Element erwartet.


----------



## ronaldh (5. September 2008)

Zvoni hat gesagt.:


> Nachtrag: Ich entschuldige mich für die eventuelle Verwirrung, die ich verursacht habe.



Kein Problem, in C ist das meiner Erinnerung nach auch so, so viel ich weiß (allerdings liegen meine letzten C-Erlebnisse etwa 15 Jahre zurück...).

Grüsse
ronaldh


----------

