Re: byVal statt byref

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Andreas Born (Andreas.Born_at_gmx.de)
Date: 07/07/04


Date: Wed, 7 Jul 2004 05:13:00 +0200

Hallo Jens,

> ich will ein array byVal an eine Sub übergeben und nicht byref.
> Folgendes nimmt er aber nicht an:
>
> Public sub ZnotList(byval Znots() As String)
>
> Er sagt:
> Arrayargument muss als Verweis (byref) übergeben werden. Warum?

Weil VB Arrays nicht kopieren kann (oder will).

Workaround (Umweg über Variant):

    Dim A() as String
    Call Test(A)

    Sub Test(ByRef V As Variant)
      Dim B() As String
        B = V
        '...
    End Sub

Nachteil: Die Werte werden zweimal kopiert.
Sofern Du nicht unbedingt ein echtes String-Array in ZnotList benötigst,
sondern nur die jeweiligen Werte, dann arbeite direkt mit einem Variant,
dann allerdings ByRef.

Ansonsten ist es eigentlich besser, das Array ByRef zu übergeben, und
Elemente, die durch andere Funktionen verändert werden könnten, zu
kopieren:

    Public sub ZnotList(ByRef Znots() As String)
      'entweder:
        Call andereFunktion((Znots))
      'bzw:
        andereFunktion (Znots)
      'oder bei einzelnen Elementen
        s = Znots(2)
        andereFunktion2 s
      'bzw:
        andereFunktion2 (Znots(2))
    End Sub

Viele Grüße,
Andreas



Relevant Pages