【问题标题】:VB6 - ByRef argument type mismatch error - where is it?VB6 - ByRef 参数类型不匹配错误 - 它在哪里?
【发布时间】:2009-03-27 01:25:33
【问题描述】:

在我使用 VB6 的 10 多年里,我时不时地收到一个“ByRef 参数类型不匹配”错误,我根本找不到不匹配的地方。在挣扎了一段时间后,我总是以一种或另一种方式强制输入,但这次我想我会问。我包括了所有我认为可能与此有关的代码;但是你现在可以跳过它,在我演示问题后参考它:

公共类型 PBufferType
  Location(9) As Integer ' 代码位置
  ValueHi(9) As Integer ' Vhi 代码
  ValueLo(9) As Integer ' Vlo 代码
  Locked(9) As Integer ' 配对状态
  Gamma(9) As Single ' 本段与下一段之间的 Gamma
结束类型

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

Public SelectedBank 为整数

函数 MeasureLuxAtCode(code As Integer) As Single
  调用 TestPatternForm.DrawTestWindow(3, 代码)
  MeasureLuxAtCode = MeasureLux(1)
结束功能

问题出现在下面。 “LuxMinTarget = MeasureLuxAtCode(FirstLevel)”行生成“ByRef argument type mismatch”错误,表示 FirstLevel 不是整数。

子确定理想LuxCurve() Dim FirstLevel, FirstDACtoMeasure 为整数 FirstDACtoMeasure = 0 FirstLevel = GammaBuffer(SelectedBank).Location(FirstDACtoMeasure) LuxMinTarget = MeasureLuxAtCode(FirstLevel) 结束子

但是该死,FirstLevel 一个整数,不是吗?它是一个 int,它的值是由一个返回 int 的 UDT 设置的,所以我哪里出错了?如果我将它强制为这样的 int:

LuxMinTarget = MeasureLuxAtCode(Int(FirstLevel))

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

那么这是编译器中的错误还是只是我太密集了?

【问题讨论】:

  • SelectedBank 和 FirstDACtoMeasure 是在哪里定义的?
  • 我编辑了问题以添加这两个变量。 SelectedBank = 全局整数和 FirstDACtoMeasure = 局部整数。
  • 只有在调用参数通过引用传递的子/函数时才能得到这个。 SelectedBank、FirstDACtoMeasure、DrawTestWindow()和MeasureLux()的定义是什么?

标签: vb6


【解决方案1】:

问题出在这里:

Dim FirstLevel, FirstDACtoMeasure As Integer

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

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

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

Dim FirstLevel As Integer
Dim FirstDACtoMeasure As Integer

【讨论】:

  • 呸。我没有注意到这一点。好电话。
  • 哇,发现十年后我还没有理解“Dim”的说法……我需要喝一杯!谢谢!
  • VB6 都是陷阱:-|
【解决方案2】:

John T,您实际上可以在列表中显式声明变量。

将 FirstLevel 设为整数,FirstDACtoMeasure 设为整数

【讨论】:

  • 谢谢。我知道这一点,并且可能应该指出这一点,尽管为了清楚起见,我通常采用每行一行的方法。
  • 你可以,但你不应该。每行一个变量声明是常见的做法。
【解决方案3】:

正如 Mitch 所指出的,VB6 仅将逗号分隔列表中的最后一个变量声明为明确定义的类型。先前的条目已声明,但作为变体。

要正确声明变量,您需要单独处理它们。

Dim FirstLevel As Integer
Dim FirstDACtoMeasure As Integer

在以前版本的 VB、IIRC 中也是如此,对于 VB6 来说并不新鲜。

【讨论】:

    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多