PRB: Semantic Compatibility Problem with Hardtypes in VBScript

ID: Q190272


The information in this article applies to:


SYMPTOMS

VBScript has a semantic compatibility difference with Visual Basic for Applications (VBA) with regard to hardtype comparisons. Basically, VBA's comparison semantics are such that non-variant values are "hardtypes," meaning that they cannot change types. During comparison, variants must be coerced to their types. The problem is that in VBScript everything is a variant, and VBScript doesn't remember that it's a "hardtype" value.


STATUS

This behavior is by design.


MORE INFORMATION

Steps to Reproduce Behavior

Use the following code to reproduce this behavior:

Sub main()
  Dim v1
  Dim v2
  v1 = "100"   ' variant string
  v2 = 1000    ' variant integer
  msgbox (v1 > v2)   ' string variant always > numeric variant
  msgbox (v1 > CLng(v2)) ' Clng(v2) is hardtype so it is converted
                         ' to string variant
End Sub 
If you run this test in VBA, the first comparison (v1 > v2) is True because variant strings are always greater than variant numbers. In the second comparison (v1 > CLng(v2)), the CLng() function returns a hardtype long value; in this case, VBA converts the string variant to the hardtype (long) and performs the comparison, which returns False. Both comparisons return True in VBScript.

This problem will be apparent for every runtime function that returns a variant in VBScript but returns a hardtype/integral in VBA. This includes the numeric conversions (such as CLng), the math functions (which return double in VBA), and so forth.

Additional query words:


Keywords          : kbScript kbVBScript kbIE500 
Version           : WINDOWS:3.0,3.01,3.02,4.0,5.0; winnt:3.0
Platform          : WINDOWS winnt 
Issue type        : kbprb 

Last Reviewed: July 13, 1999