2009-03-27 11 views
15

10+ सालों के लिए मैं वीबी 6 का उपयोग कर रहा हूं, हर बार और फिर मुझे "ByRef तर्क प्रकार मेल नहीं मिला" त्रुटि मिलती है जहां मुझे आसानी से मेल नहीं मिल रहा है। थोड़ी देर के लिए संघर्ष करने के बाद मैंने हमेशा एक तरह से या दूसरे तरीके को मजबूर कर दंडित किया है, लेकिन इस बार मैंने सोचा कि मैं पूछूंगा। मैं उन सभी कोडों को शामिल कर रहा हूं जो मुझे लगता है कि इसके साथ कुछ करने के लिए कुछ भी हो सकता है; लेकिन अब आप इसे छोड़ सकते हैं और समस्या का प्रदर्शन करने के बाद इसका उल्लेख कर सकते हैं:वीबी 6 - ByRef तर्क प्रकार मेल नहीं खाता - यह कहां है?

Public Type PBufferType 
    Location(9) As Integer ' code location 
    ValueHi(9) As Integer ' Vhi code 
    ValueLo(9) As Integer ' Vlo code 
    Locked(9) As Integer ' State of pair 
    Gamma(9) As Single  ' Gamma between this segment and next 
End Type 

Public GammaBuffer(1) As PBufferType ' The main data type 

Public SelectedBank as Integer 

Function MeasureLuxAtCode(code As Integer) As Single 
    Call TestPatternForm.DrawTestWindow(3, code) 
    MeasureLuxAtCode = MeasureLux(1) 
End Function 

समस्या नीचे आती है। "LuxMinTarget = MeasureLuxAtCode (FirstLevel)" रेखा एक "ByRef तर्क प्रकार मेल नहीं खाता" उत्पन्न करती है, जो दर्शाती है कि फर्स्टलेवल एक पूर्णांक नहीं है।

 
Sub DetermineIdealLuxCurve() 
    Dim FirstLevel, FirstDACtoMeasure As Integer 
    FirstDACtoMeasure = 0 
    FirstLevel = GammaBuffer(SelectedBank).Location(FirstDACtoMeasure) 
    LuxMinTarget = MeasureLuxAtCode(FirstLevel) 
End Sub 

लेकिन यह डांग, FirstLevel एक पूर्णांक है, यह है नहीं है? यह एक int मंद है, इसका मूल्य एक यूडीटी द्वारा निर्धारित किया जाता है जो एक int देता है, तो मैं गलत कहां गया? अगर मैं इसे इस तरह की int पर मजबूर करता हूं:

 
    LuxMinTarget = MeasureLuxAtCode(Int(FirstLevel)) 

संकलक/दुभाषिया की खुशियाँ। पर मैं नहीं।

तो क्या यह संकलक में एक बग है या सिर्फ मुझे घना है?

+0

कहाँ के रूप में SelectedBank और FirstDACtoMeasure परिभाषित कर रहे हैं? –

+0

मैंने उन दो चर जोड़ने के लिए प्रश्न संपादित किया। चयनित बैंक = वैश्विक पूर्णांक और FirstDACtoMeasure = स्थानीय पूर्णांक। –

+0

आप उप-फ़ंक्शन को कॉल करते समय केवल यह प्राप्त कर सकते हैं जिसका पैरामीटर संदर्भ द्वारा पारित किया जाता है। चयनित बैंक, फर्स्टडाकोटोमेज़र, ड्राटेस्टविंडो() और मेजरलक्स() की परिभाषाएं क्या हैं? –

उत्तर

39

समस्या यहाँ है:

Dim FirstLevel, FirstDACtoMeasure As Integer 

यह वास्तव में एक Variant रूप FirstLevel वाणी और नहीं एक Integer के रूप में आप उम्मीद कर सकते हैं।

यह एक क्लासिक वीबी 6 गोचाचा है! (और आप इसे पहले काटने वाले पहले नहीं हैं)।

प्रति पंक्ति एक चर घोषणा समस्या से बचा जाता है:

Dim FirstLevel As Integer 
Dim FirstDACtoMeasure As Integer 
+0

बह। मैंने यह नहीं देखा। अच्छा निर्णय। –

+7

वाह, यह समझने के लिए कि एक दशक बाद मुझे "मंद" कथन नहीं समझा ... मुझे एक पेय चाहिए! धन्यवाद! –

+0

वीबी 6 सभी गॉथस है: - | – TheCrazyProgrammer

1

मिच के रूप में बताया, VB6 केवल एक अल्पविराम सीमांकित सूची में अंतिम चर वाणी के रूप में स्पष्ट रूप से परिभाषित प्रकार की। पिछली प्रविष्टियां घोषित की जाती हैं, लेकिन वेरिएंट के रूप में।

चर को सही तरीके से घोषित करने के लिए, आपको उन्हें व्यक्तिगत रूप से संभालने की आवश्यकता है।

Dim FirstLevel As Integer 
Dim FirstDACtoMeasure As Integer 

यह भी वीबी, IIRC, VB6 के लिए के लिए कोई नई बात नहीं के पिछले संस्करणों में मामला था।

4

जॉन टी, आप वास्तव में एक सूची में चर घोषित कर सकते हैं।

मंद पूर्णांक के रूप में FirstLevel, FirstDACtoMeasure पूर्णांक

+0

धन्यवाद। मुझे इसके बारे में पता था, और शायद इसे इंगित करना चाहिए था, हालांकि मैं आमतौर पर स्पष्टता के लिए एक-प्रति-रेखा दृष्टिकोण के साथ जाता हूं। –

+1

आप कर सकते हैं, लेकिन आपको नहीं करना चाहिए। प्रति पंक्ति एक परिवर्तनीय घोषणा सामान्य अभ्यास है। –