2010-10-01 7 views
1

J'essaye de ReDim un tableau d'objet membre d'une classe différente. Par exemple:ReDim un pointeur de tableau VB6

Class1.cls

Dim mStuffArray() As New clsStuff 

Property Get StuffArray() As clsStuff() 
    StuffArray = mStuffArray 
End Property 

Class2.cls

Private Sub Foo(ByRef pClass1 As Class1) 
    Dim tStuffArray() As clsStuff 

    tStuffArray = pClass1.StuffArray 
    ReDim tStuffArray(1 To 2) 
End Private 

Le problème ici est que Foo ne semble pas être le membre ReDim'ing mStuffArray dans Class1. Une idée de ce que je fais mal? Pardonnez-moi si mon VB6 semble étrange ou les conventions de nommage ne sont pas standard, je devais plonger dans un vieux code existant et je suis de nouveau à VB6

Dave

Répondre

3

Redim ne fait pas de copie du tableau.

Je pense qu'il est plus probable que 4 retournant le tableau d'une propriété crée une copie. Les docs ne sont pas très clairs. http://msdn.microsoft.com/en-us/library/aa261343(VS.60).aspx

Il serait plus simple d'utiliser une variable membre Public. Et pourquoi ne pas utiliser une collection plutôt qu'un tableau?

+0

Oui, une "copie" (valeur) est renvoyée, pas une référence à l'original. – Bob77

+0

Merci pour l'aide MarkJ et Regex. Il a été très intéressant de revenir à VB 6 à partir de langues modernes. –

1

Je ne l'ai jamais regardé dans VB6, mais si je Je devais faire une supposition, je pense que lorsque vous utilisez ReDim, il crée une copie du tableau existant et modifie tStuffArray pour pointer vers la nouvelle copie. Cependant, pClass1.mStuffArray fait toujours référence à l'ancien tableau.

Le documentation for ReDim affirme que « ReDim crée un nouveau tableau, la copie de tous les éléments du tableau existant »

Je recommande l'ajout d'une méthode de Class1 qui effectue ReDim sur la variable mStuffArray privée.

Dim mStuffArray() As New clsStuff 

Property Get StuffArray() As clsStuff() 
    StuffArray = mStuffArray 
End Property 

Sub Foo() 
    ReDim mStuffArray(1 To 2) 
End Sub 

Espérons que cela fonctionne. Comme je l'ai dit, je ne suis pas un programmeur VB6, donc je vais peut-être m'en séparer.

+0

Ah intéressant. C'est une raison plausible pour laquelle mon code ne fonctionne pas. Quelqu'un peut-il confirmer ce comportement de ReDim? Ou possible d'autres méthodes élégantes de manipulation de mon cas? –

+0

Je me suis contenté d'ajouter une propriété Let et d'appeler le let à droite après avoir redimensionné le tableau. Mais merci, vos informations sur ReDim ont été utiles pour comprendre comment cela fonctionne. –

+0

Vous avez lié à la documentation VB.Net pas les documents VB6 – MarkJ

0

Vous pouvez également prendre en compte l'objet Dictionary.

Questions connexes