Visual Basic stores UDTs in unpacked format, that is it alignes all UDT elements to the double word (except that Integers and Boolean are aligned to the word, and byte elements aren’t aligned at all). To keep the elements aligned VB adds padding bytes where necessary. For instance the structure:
Type MyType Member1 As Integer Member2 As LongEnd Type
has a “real” size of 6 bytes, but VB adds 2 bytes between Member1 and Member2 in order to maintain the dword alignment of second member.
In VB5 both Len(MyType) and LenB(MyType) return 6. In fact, under VB5 these two values are different only when the UDT contains a fixed-length string: in this case, Len() considers the length that the string would have when converted to ANSI (such as when you store the UDT to a file), while LenB() considers the string in Unicode format.
In VB6 LenB has been modified and now returns the real size of the structure, including padding bytes: therefore LenB(MyType) returns 8 under VB6. If you aren’t aware of this detail you might introduce subtle bugs when you port a VB5 app to VB6.