我使用VB6已有10多年了,时不时出现“ ByRef参数类型不匹配”错误,我根本找不到该错误。在挣扎了一段时间之后,我总是以一种或另一种方式强制使用该类型,但这次我想问一下。我包含了所有我认为可能与此有关的代码;但您可以在演示问题后立即跳过并参考它:

公共类型PBufferType
Location(9)作为整数的代码位置
ValueHi(9)作为Integer'Vhi代码
ValueLo(9)作为Integer'Vlo代码
锁定(9)为整数'配对状态
Gamma(9)作为此分段和下一个分段之间的Single'Gamma
终端类型

Public GammaBuffer(1)As PBufferType'主要数据类型

公开选定银行为整数

单个函数MeasureLuxAtCode(编码为整数)
调用TestPatternForm.DrawTestWindow(3,代码)
MeasureLuxAtCode = MeasureLux(1)
结束功能


问题出现在下面。 “ LuxMinTarget = MeasureLuxAtCode(FirstLevel)”行生成“ ByRef参数类型不匹配”错误,指示FirstLevel不是整数。

子确定IdealLuxCurve()
昏暗的FirstLevel,FirstDACtoMeasure作为整数
FirstDACtoMeasure = 0
FirstLevel = GammaBuffer(SelectedBank).Location(FirstDACtoMeasure)
LuxMinTarget = MeasureLuxAtCode(FirstLevel)
结束子


但是当它,FirstLevel是一个整数,不是吗?它已将int调暗,其值由返回int的UDT设置,那么我在哪里出错了?如果我将其强制为这样的int:

LuxMinTarget = MeasureLuxAtCode(Int(FirstLevel))


编译器/解释器很高兴。但我不是。

那么,这是编译器中的错误还是仅仅是我太笨了?

最佳答案

问题在这里:

Dim FirstLevel, FirstDACtoMeasure As Integer


实际上,这将FirstLevel声明为Variant,而不是您所期望的Integer

这是经典的VB6陷阱! (而且您不是第一个被它咬伤的人)。

每行声明一个变量可以避免此问题:

Dim FirstLevel As Integer
Dim FirstDACtoMeasure As Integer

10-01 10:55