2009-05-12 25 views
9

में पैरामीटर के रूप में पासिंग सरणी निम्नलिखित कोड VB6 (sp6) को चिह्नित किया गया है, जो लाइन पर कार्यालय में दो मशीनों पर 'VB.exe में अनचाहे अपवाद गलती' के साथ मारता है।वीबी 6

''# Form1.frm 
Option Explicit 
Private ArrayHolder As Class2 

Private Sub Command1_Click() 
    Set ArrayHolder = New Class2 

    Dim arr(3) As Long 
    arr(0) = 1 
    arr(1) = 2 
    arr(2) = 3 

    ArrayHolder.Add arr 

End Sub 

''# -----------------------------------------------------------  
''# Class1.cls 
Option Explicit 

Private m_myArray() As Long 

Public Property Get myArray() As Long() 
    myArray = m_myArray 
End Property 

Friend Property Let myArray(ByRef anArray() As Long) 
    m_myArray = anArray 
End Property 

''# -----------------------------------------------------------  
''# Class2.cls 
Option Explicit 

Friend Function Add(newArray() As Long) As Class1 
    Dim oClass As Class1 
    Set oClass = New Class1 

    oClass.myArray = newArray <- This kills VB6 dead 
    MsgBox "passed" 

End Function 
क्या मैं विभिन्न वेबसाइटों पर बता सकते हैं मैं एक सरणी सही ढंग से गुजर रहा हूँ, लेकिन मैं वास्तव में इसे सही ढंग से कर रहा हूँ से

, और क्यों यह VB6 तो बुरी तरह मरने के लिए खड़ी कर रहा है?

+0

क्या सिंटैक्स हाइलाइटर को संकेत देने का कोई तरीका है कि यह कौन सी भाषा हो रही है? –

+0

क्या आप वाकई यह कोड सही हैं? Class2.cls के भीतर कोड Form1.frm जैसा ही प्रतीत होता है। क्या ये सही है? –

+0

यह कोड समझ में नहीं आता है। ArrayHolder कहां है। जोड़ें? Class2.cls में कोड Form1.frm जैसा क्यों है? – GSerg

उत्तर

8

मेरे पास कोई जवाब नहीं है, और निश्चित रूप से एक उत्सुक सवाल है, लेकिन क्यों न केवल एक विधि जोड़ें और आगे बढ़ें?

'Passed the test 
Public Sub LetMyArray(anArray() As Long) 
    m_myArray = anArray 
End Sub 


'oClass.MyArray = newArray ' <- This kills VB6 dead 
oClass.LetMyArray newArray ' <- This works 
+0

उत्सुकता से यह काम करता है। वैसे मैं इसे एक संग्रह बनाने पर काम कर रहा था, लेकिन इसका उपयोग करने वाले सभी स्थानों को अद्यतन करना एक दर्द साबित हुआ था। –

+3

मुझे लगता है कि आपने अभी वीबी रनटाइम में एक बग खोजा है। लेकिन हम कभी भी एसपी 7 नहीं देखेंगे :) –

+0

+1 व्यावहारिकता के लिए +1! और, शायद दुख की बात है, एसपी 7 के बारे में सही होने के लिए। रनटाइम के लिए विस्तारित समर्थन में सर्विस पैक (मुझे याद नहीं है) – MarkJ

1

मुझे पता नहीं क्यों ऐसा होता है है, लेकिन अगर आप वैसे भी एक सरणी की एक प्रतिलिपि चाहते हैं, class2 में एक संस्करण का उपयोग करें:

Private m_myArray As Variant 

Public Property Get myArray() As Variant 
    myArray = m_myArray 
End Property 

Friend Property Let myArray(anArray As Variant) 
    m_myArray = anArray 
End Property 

ठीक करता है यह, लेकिन अभी भी, मैं के बारे में उत्सुक हूँ कारण।

+0

जब मैंने एक संस्करण की कोशिश की, तो यह अभी भी दुर्घटनाग्रस्त हो गया। शायद मैंने कुछ गलत किया ?! –

+0

हो सकता है कि आपने जो कुछ कहा मैंने अभी किया और क्लास 2 की सामग्री को इस कोड के साथ बदल दिया। :) बेशक, मैं कक्षा 1 कहना चाहता था। मेरे लिए ठीक काम करता है। – GSerg

+0

अभी भी मेरी मशीन में दुर्घटनाग्रस्त है –

8

यह आईडीई में एक बग है (संकलित ठीक है) कि एमएस कभी तय नहीं है। मैं इस तरह एक अस्थायी सरणी के साथ एक वैकल्पिक हल का उपयोग कर रहा:

Friend Function Add(newArray() As Long) As Class1 
    Dim oClass As Class1 
    Dim tempArray() As Long 
    Set oClass = New Class1 

    tempArray = newArray 
    oClass.myArray = tempArray <- Should work now 
    MsgBox "passed" 

End Function 

FYI करें, यह बाइट सरणियों के साथ खराब हो जाता है (लांग सरणियों सुरक्षित हैं) जब आप गलती से परम या सरणी संपत्ति पर माउस के साथ ले जाएं। अपने माउस को कोड से बेहतर रखें :-))