我使用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