FIX: Operators Do Not Recursively Call Object Default Properties (194368)
The information in this article applies to:
- Microsoft Visual Basic Learning Edition for Windows 6.0
- Microsoft Visual Basic Professional Edition for Windows 6.0
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
This article was previously published under Q194368 SYMPTOMS
In Microsoft Visual Basic 5.0, the following code calls the default property of obj:
Dim obj As Object
If obj = 5 Then
If the Object's default property returns an object, it recursively calls the default property of that object until it finally finds a non-object property.
Prior to Visual Basic 6.0 Service Pack 3 (SP3), Visual Basic 6.0 only invoked the default property of the second level, at most. If the default property is also an object, Visual Basic 6.0 generates the following error message:
Type Mismatch
CAUSE
The way the comparison operators (=, >, <, etc.) evaluate objects was
changed in Visual Basic 6.0. However, the behavior was changed back in Visual Basic 6.0 SP3.
NOTE: Visual Basic 5.0 behavior for this case is undocumented and
programmers should not rely on this feature.
RESOLUTION- Install Visual Basic 6.0 SP3 or later.
-or-
- Use the following workaround:
- Add the following function to your project:
Public Function EvaluateObjToLong(obj As Object) As Long
EvaluateObjToLong = obj
End Function
- Replace the following line:
if obj = 5 then
with:
if EvaluateObjToLong(obj) = 5 then
NOTE: This is only a workaround for migrating from Visual Basic
5.0 to Visual Basic 6.0. Programmers should not rely on this feature. The
recursive evaluation of the default property of the assignment operator may
change in future versions.
The use of default properties, especially non-parameterized default properties, is discouraged for the following reasons: - The code is harder to read because the person who reads your code must know exactly which property is the default to understand what you are really doing.
- The code might not work the way you think it should and the behavior might change between different versions of Visual Basic.
- If you forget to write the property name when you use an object that has a default property, Visual Basic considers that you are using the default property and you will not get an error message when you compile the code. However, if your object does not support a non-parameterized default property, the compiler generates an error message.
STATUSThis bug was corrected in Visual Studio 6.0 Service Pack 3.
For more information about Visual Studio 6.0 Service Packs, please see the following articles in the Microsoft Knowledge Base: 194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why
194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed
NOTE: This behavior change is by design. The reasons for this are: - This change makes the behavior of late bound objects more closely match that of early bound objects.
- The behavior of Visual Basic 5.0 permits the possibility of an infinite loop, which was determined to be much worse than this restriction.
Modification Type: | Major | Last Reviewed: | 5/13/2003 |
---|
Keywords: | kbbug kbfix kbVS600sp3fix KB194368 |
---|
|