Od ponad 10 lat używam VB6, od czasu do czasu pojawia się błąd "Niedopasowanie typu argumentu ByRef", w którym po prostu nie mogę znaleźć niezgodności. Po chwili zmagań zawsze punted przez zmuszanie typu w ten czy inny sposób, ale tym razem myślałem, że zapytam. Załączam cały kod, który moim zdaniem może mieć coś z tym wspólnego; ale można pominąć go teraz i odnoszą się do niego po tym, jak wykazać problem:VB6 - Błąd typu niedopasowania argumentu ByRef - gdzie on jest?
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
Problem pojawia się poniżej. Linia "LuxMinTarget = MeasureLuxAtCode (FirstLevel)" generuje błąd "Brak zgodności typu argumentu ByRef", wskazując, że FirstLevel nie jest liczbą całkowitą.
Sub DetermineIdealLuxCurve() Dim FirstLevel, FirstDACtoMeasure As Integer FirstDACtoMeasure = 0 FirstLevel = GammaBuffer(SelectedBank).Location(FirstDACtoMeasure) LuxMinTarget = MeasureLuxAtCode(FirstLevel) End Sub
Ale Dang nim Firstlevel jest liczbą całkowitą, prawda? Zmieniono int, jego wartość jest ustalana przez UDT, który zwraca int, więc dokąd się pomyliłem? Jeśli zmusić go do int takich jak to:
LuxMinTarget = MeasureLuxAtCode(Int(FirstLevel))
kompilator/tłumacz jest szczęśliwy. Ale ja nie jestem.
Czy jest to błąd w kompilatorze, czy tylko gęsty?
Gdzie SelectedBank i FirstDACtoMeasure zdefiniowane? –
Edytowałem pytanie, aby dodać te dwie zmienne. SelectedBank = globalna liczba całkowita i FirstDACtoMeasure = lokalna liczba całkowita. –
Można uzyskać to tylko podczas wywoływania sub/funkcji, której parametr (y) są przekazywane przez odniesienie. Jakie są definicje SelectedBank, FirstDACtoMeasure, DrawTestWindow() i MeasureLux()? –