VB6 – ByRef argument type mismatch error – where is it

vb6

For the 10+ years I've been using VB6, every now and then I get a "ByRef argument type mismatch" error where I simply can't find the mismatch. After struggling for a while I've always punted by forcing the type one way or another, but this time I thought I'd ask. I'm including all the code I think could have anything to do with this; but you can skip it now and refer to it after I demonstrate the problem:

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

The problem occurs below. The "LuxMinTarget = MeasureLuxAtCode(FirstLevel)" line generates a "ByRef argument type mismatch" error, indicating that FirstLevel is not an integer.

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

But dang it, FirstLevel is an integer, isn't it? It's dim'ed an int, its value is set by a UDT that returns an int, so where did I go wrong? If I force it to an int like this:

  LuxMinTarget = MeasureLuxAtCode(Int(FirstLevel))

the compiler/interpreter's happy. But I'm not.

So is this a bug in the compiler or just me being dense?

Best Answer

The problem is here:

Dim FirstLevel, FirstDACtoMeasure As Integer

This actually declares FirstLevel as a Variant and not as an Integer as you might expect.

This is a classic VB6 gotcha! (and you are not the first to be bitten by it).

Declaring a variable per line avoids the problem:

Dim FirstLevel As Integer
Dim FirstDACtoMeasure As Integer
Related Topic