Czy istnieje sposób na skopiowanie odwołania do tablicy w VBA (lub VB6)?Skopiuj odwołanie do tablicy w VBA
W języku VBA tablice są typami wartości. Przypisanie jednej zmiennej tablicy do drugiej powoduje skopiowanie całej tablicy. Chcę uzyskać dwie zmienne tablicowe wskazujące na tę samą tablicę. Czy jest jakiś sposób, aby to osiągnąć, być może używając niektórych funkcji pamięci API i/lub funkcji , która w rzeczywistości zwraca adres zmiennej w VBA?
Dim arr1(), arr2(), ref1 As LongPtr
arr1 = Array("A", "B", "C")
' Now I want to make arr2 refer to the same array object as arr1
' If this was C#, simply assign, since in .NET arrays are reference types:
arr2 = arr1
' ...Or if arrays were COM objects:
Set arr2 = arr1
' VarPtr lets me get the address of arr1 like this:
ref1 = VarPtr(arr1)
' ... But I don't know of a way to *set* address of arr2.
Nawiasem mówiąc, jest to możliwe, aby uzyskać wiele odniesień do tej samej tablicy, przekazując tę samą zmienną tablicową ByRef
do wielu parametrów metody:
Sub DuplicateRefs(ByRef Arr1() As String, ByRef Arr2() As String)
Arr2(0) = "Hello"
Debug.Print Arr1(0)
End Sub
Dim arrSource(2) As String
arrSource(0) = "Blah"
' This will print 'Hello', because inside DuplicateRefs, both variables
' point to the same array. That is, VarPtr(Arr1) == VarPtr(Arr2)
Call DuplicateRefs(arrSource, arrSource)
Ale to nadal nie pozwalają na wprost wytwarzać nowe odniesienie w tym samym zakresie co istniejący.
Chociaż ja nie znam odpowiedzi na swoje pytanie, jestem bardzo zainteresowany w roztworze ... Czy można utworzyć klasy Singleton, który posiada swoją tablicę i powrotu odwołanie za pośrednictwem klasy? – Marshall
Nie. Zwracanie tablicy z funkcji lub właściwości działa także według wartości - zwracanie nowej kopii tablicy. To jest prawdziwy problem, który próbuję rozwiązać. –