## Visual Basic 5 Curiosities

All examples were tested with VB5.

### Arrays with zero Items

`Private Sub Command1_Click()`
`Dim buffer(3) As Byte`
`Dim arr() As Byte`
`arr = MidB(buffer, 1, 0)`
`Call MsgBox(LBound(arr) & " / " & UBound(arr))`
`' LBound is 0 and UBound is -1`
`' but ReDim arr(0 to -1) is not allowed. Why?`
`End Sub`

### Assigning Arrays

`Private Sub Form_Load()`
`Dim byteBuf(3) As Byte`
`Dim byteSeq() As Byte`
`byteSeq = byteBuf ' Is allowed`
`Dim longBuf(3) As Long`
`Dim longSeq() As Long`
`longSeq = longBuf ' Is not possible. Why?`
`End Sub`
``

### Long VB names

It is not possible to compile VB programs to executable files if project name plus class name has more than 39 characters due to a limitation of VB5 and ActiveX.

### Decimal type

VB knows a decimal type but you have to use Variant. CORBA long long is mapped to a Decimal inside a Variant.
`Dim decVal As Variant`
`decVal = CDec("12345678901234567890")`

### Global Err object

Each ActiveX-DLL has its own global Err object if you use the DLL by reference. There is only one global Err object if you include the DLL project in your main project for debugging purposes and you get different behavior.

### Garbage collection of weak circular references

VB do not garbage collection of weak circular references. A reason of some memory leaks in VB applications. ActiveX EXE doesn´t terminate if circular references exists.

### Use of `As New' is discouraged

`Dim obj As New cMyClass`
`Set obj = Nothing`
`If obj Is Nothing Then`
This is never happen therefore declaring variables `As New` is, in general, discouraged.