VB6类型不匹配错误

3
我在以下代码中遇到了类型不匹配的错误:
   IF obj.propery THEN
    ...
    END IF

我正在使用的代码存储在Visual Source Safe中,当其他开发人员运行同一项目时,代码可以无错误运行。实际上,该属性是一个字符串,这可能就是问题所在。当我进行调试和测试该属性时,即:

?obj.propery = True

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


2
VB 6 中没有 Option Strict。你所搜索的可能是与 VB.NET 相关的资源。不会吧,其他 开发人员难道在使用 VB.NET 吗? - Cody Gray
'obj' 被声明为什么类型? - jakdep
obj是自定义类型,property是字符串属性。 - user322076
我的原始答案显然是不正确的。我现在可以重现VB 6将值为“true” / “True”或“false” / “False”的String强制转换为Boolean,并在if语句中测试该值。尽管这让我感到痛苦,但它似乎是现实。当然,如果字符串设置为除这两个值之外的其他值,则仍会收到编译器错误。您能否尝试在您的VB 6副本中创建一个全新的项目,并查看是否从较大的代码库中提取了相同的内容? - Cody Gray
4个回答

3

我认为你遇到类型不匹配错误可能有完全不同的原因,特别是当你要访问对象属性时。我曾经在指向一个不同的DLL而非注册的DLL时遇到过这个错误。你会发现使用VB时,它会在构建时“即时”注册一个DLL,所以你可能会在意料之外的地方访问代码。也许这不是你的问题所在,但仍值得探究。


2

这与VB6无关,而是与XP模式以及使用另一个域的用户帐户有关,而不是XPMUser。当我使用XPMUser时,应用程序运行正常,这非常奇怪,我不确定原因何在。如果有人知道原因,我很乐意听取。


1
我非常好奇是什么引起了这个问题。不过很高兴你找到了罪魁祸首。今晚我终于可以睡个好觉了。当然,运行在XP模式下会导致VB 6将此标记为错误的事实,让我怀疑是否应该强制所有编写VB 6代码的人都在XP模式下进行开发... - Cody Gray
我在XP虚拟机中尝试将一个字符串赋值给另一个字符串时遇到了相同的问题。 - Jeff LaFay

1

你确定这不是一个布尔值为真的情况吗?


0

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

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

但是

在开始访问对象的属性之前,最好先检查一下该对象是否为空。


我已经尝试了 obj.property = "True",并且它可以正常工作。然而,如果这段代码对公司中的其他人有效,我就不能随意更改它。 - user322076
obj.property = true 和 obj.property="True" 不是同一回事。前者是布尔值检查,后者是字符串值检查。 - Rob Cowell
这是真的。由于某种原因,当其他人运行代码时,IF obj.property THEN会将obj.property(字符串)转换为布尔值。对我来说不是这样,当然,由于obj.property是一个字符串,obj.property =“True”将在=运算符上返回布尔值。对于其他人来说,它就像是自动将obj.property转换为布尔值。 - user322076

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接