【问题标题】:VB6 type mismatch errorVB6 类型不匹配错误
【发布时间】:2011-01-21 09:13:06
【问题描述】:

我收到以下类型不匹配错误

   IF obj.propery THEN
    ...
    END IF

我使用的代码在视觉源上是安全的,当其他开发人员运行相同的项目时,代码运行时没有错误。该属性实际上是一个字符串,这可能是问题所在。当我调试和测试属性时,即

?obj.propery = True

没有抛出错误,这有点奇怪。如果我将光标放在属性上,它会显示“True”。我对此事进行了一些搜索,发现这可能与 OPTION STRICT 有关,但是我的代码版本与其他开发人员相同,并且 OPTION STRICT 没有关闭,它没有被改变在代码中。是否有任何其他设置可能会影响代码在运行时的执行?

【问题讨论】:

  • VB 6 中没有Option Strict。您所做的搜索可能已经找到了与VB.NET 相关的资源。呃,其他开发人员可能正在使用 VB.NET,不是吗?
  • 声明'obj'的类型是什么?
  • obj 是自定义类型,property 是字符串属性。
  • 我原来的答案显然是不正确的。现在,当使用 if 语句测试值时,我可以重现 VB 6 将值“true”/“True”或“false”/“False”的 String 强制转换为 Boolean。尽管这对我来说很痛苦,但它似乎是现实。如果字符串设置为 other 而不是这两个值,您当然仍然会收到编译器错误。您可以尝试在您的 VB 6 副本中创建一个全新的项目,并查看它是否与从更大的代码库中提取的相同的事情?

标签: vb6 type-mismatch


【解决方案1】:

令我震惊的是,您的类型不匹配错误可能有完全不同的原因,尤其是在您访问对象属性时。当我出于某种原因指向与已注册的不同的 DLL 时,我遇到了此错误。您会发现 VB 在您构建它时会“即时”注册一个 DLL,因此您最终可能会在您没有预料到的地方访问代码。这可能不是您的问题,但值得探索。

【讨论】:

    【解决方案2】:

    这与 VB6 无关,它与 XP 模式有关,并且使用我来自另一个域的用户帐户,而不是 XPMUser。当我使用 XPMUser 应用程序运行时,这很奇怪,我不确定为什么会这样。如果有人有理由我很想听。

    【讨论】:

    • 我也很想知道是什么原因造成的。不过,我很高兴你找出了罪魁祸首。今晚我真的可以睡觉了。当然,在 XP 模式下运行会导致 VB 6 将此标记为错误这一事实让我想知道是否应该强制仍然编写 VB 6 代码的每个人都应该在 XP 模式下开发......跨度>
    • 我在 XP 虚拟机中尝试将字符串分配给字符串时遇到了同样的问题。
    【解决方案3】:

    所以你确定这不是case of a boolean being Vrai

    【讨论】:

      【解决方案4】:

      我倾向于在你的 IF 条件中更明确

      IF isempty(obj.property) = false AND isnull(obj.property) = false
      

      但是

      在开始访问它的属性之前,最好先检查 obj 是否不为空......

      【讨论】:

      • 我已经尝试过 obj.property = "True" 并且效果很好。但是,如果代码对公司的其他人都有效,我不能只更改代码。
      • obj.property = true 和 obj.property="True" 不是一回事。一个是布尔检查,另一个是字符串值检查
      • 确实如此。由于某种原因,当其他人运行代码时,如果 obj.property THEN 将 obj.property(string) 转换为布尔值。对我来说,当然 obj.property = "True" 不会在 = 运算符上返回一个布尔值,因为它是一个字符串。对于其他所有人来说,它就像是在将 obj.property 自动转换/转换为布尔值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2021-05-04
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多