VB6类型不匹配错误

VB6类型不匹配错误,vb6,type-mismatch,Vb6,Type Mismatch,我在以下服务器上收到以下类型不匹配错误 IF obj.propery THEN ... END IF 我使用的代码是在visualsourcesafe上的,当其他开发人员运行同一个项目时,代码运行时不会出错。该属性实际上是一个字符串,这就是问题所在。当我调试和测试属性时,即 ?obj.propery = True 没有抛出错误,这有点奇怪。如果我将光标放在属性上,它会显示“True”。我对这个问题做了一些搜索,发现这可能与OPTION STRICT有关,但是我的代码版本

我在以下服务器上收到以下类型不匹配错误

   IF obj.propery THEN
    ...
    END IF
我使用的代码是在visualsourcesafe上的,当其他开发人员运行同一个项目时,代码运行时不会出错。该属性实际上是一个字符串,这就是问题所在。当我调试和测试属性时,即

?obj.propery = True

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

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

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


在您开始访问obj的属性之前,首先检查obj是否为null是明智的……这与VB6无关,而是与XP模式有关,并使用另一个域中的用户帐户,而不是XPMUser。当我使用XPMUser时,应用程序运行起来很奇怪,我不知道为什么会这样。如果有人有我想听到的原因。

那么您确定这不是问题吗?

我突然想到,您的类型不匹配错误可能有完全不同的原因,尤其是在访问对象属性时。由于某种原因,当我指向注册的DLL的另一个DLL时,我遇到了这个错误。你会发现在VB中,当你构建它时,它会“在运行中”注册一个DLL,因此你可能会在你没有预料到的地方访问代码。在您的案例中,这可能不是问题所在,但值得探讨。

我尝试过obj.property=“True”,效果很好。但是,如果代码适用于公司中的其他所有人,我不能只更改代码。obj.property=true和obj.property=“true”不是一回事。一个是布尔值检查,另一个是字符串值检查。出于某种原因,当其他人运行代码时,如果obj.property正在将obj.property(字符串)强制转换为布尔值。对我来说不是,当然obj.property=“True”将在=运算符上返回一个布尔值,因为它是一个字符串。对于其他所有人来说,这就像是在自动转换obj.property为布尔值。在VB6中没有
选项Strict
。您所做的搜索可能找到了与VB.NET相关的资源。呃,其他开发人员不可能正在使用VB.NET,是吗?因为“obj”声明的是什么类型?obj是自定义类型,属性是字符串属性。我最初的回答显然不正确。现在,当使用if语句测试值时,我可以重现vb6,将值为“真”/“真”或“假”/“假”的
字符串强制为
布尔值。尽管这对我来说很痛苦,但这似乎是现实。当然,如果字符串被设置为这两个值以外的值,那么仍然会出现编译器错误。你能试着在你的VB6副本中创建一个全新的项目,看看它是否做了从更大的代码库中提取的相同的事情吗?我也很想知道是什么导致了这一点。不过我很高兴你找到了罪犯。我今晚真的可以睡了。当然,在XP模式下运行会导致VB6将其标记为错误,这一事实让我怀疑,是否所有仍然编写VB6代码的人都应该被迫在XP模式下开发……在XP虚拟机中尝试将字符串分配给字符串时,我遇到了同样的问题。