में एक सरणी संदर्भ की प्रतिलिपि बनाएँ क्या वीबीए (या वीबी 6) में सरणी संदर्भ की प्रतिलिपि बनाने का कोई तरीका है?वीबीए
वीबीए में, सरणी मूल्य प्रकार हैं। एक सरणी चर आवंटित करने के लिए एक और प्रतिलिपि पूरे सरणी। मैं एक ही सरणी को इंगित करने के लिए दो सरणी चर प्राप्त करना चाहता हूं। क्या इसे पूरा करने का कोई तरीका है, शायद कुछ एपीआई मेमोरी फ़ंक्शन और/या फ़ंक्शन का उपयोग करके, जो वास्तव में वीबीए में एक चर के पते को वापस कर देता है?
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.
संयोग से, यह एक तरीका है की एक से अधिक पैरामीटर के लिए एक ही सरणी चर ByRef
पास करके एक ही सरणी के लिए कई संदर्भ पाने के लिए संभव है:
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)
लेकिन यह अभी भी बस के लिए एक की अनुमति नहीं है एक मौजूदा दायरे में एक ही दायरे में एक नया संदर्भ निर्माण।
जब मैं आपके सवाल का जवाब पता नहीं है, मैं बहुत समाधान में दिलचस्पी है ... आप एक सिंगलटन वर्ग है कि आपके सरणी रखती बना सकते हैं और वर्ग के माध्यम से संदर्भ वापसी कर सकते हैं? – Marshall
नहीं। किसी फ़ंक्शन या प्रॉपर्टी से किसी सरणी को लौटने से भी मान द्वारा संचालित होता है - सरणी की एक नई प्रति लौटाता है। यह वास्तव में असली मुद्दा है जिसे मैं संबोधित करने की कोशिश कर रहा हूं। –