В течение 10 лет, когда я использовал VB6, время от времени я получаю ошибку "несоответствие типа аргумента 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", указывая, что FirstLevel не является целым числом.
Sub DetermineIdealLuxCurve() Dim FirstLevel, FirstDACtoMeasure As Integer FirstDACtoMeasure = 0 FirstLevel = GammaBuffer(SelectedBank).Location(FirstDACtoMeasure) LuxMinTarget = MeasureLuxAtCode(FirstLevel) End Sub
Но помните, что FirstLevel является целым числом, не так ли? Он dim'ed int, его значение задается UDT, который возвращает int, поэтому, где я ошибся? Если я принужу его к int следующим образом:
LuxMinTarget = MeasureLuxAtCode(Int(FirstLevel))
компилятор/интерпретатор счастлив. Но я не знаю.
Так это ошибка в компиляторе или просто я плотный?