Microsoft KB Archive/137729

= INFO: LenB Function Returns in-Memory Size of User-Defined Type =

Article ID: 137729

Article Last Modified on 11/18/2003

-

APPLIES TO


 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

-



This article was previously published under Q137729



SUMMARY
LenB function returns the in-memory size of a user-defined type (UDT).



MORE INFORMATION
Visual Basic 32-bit structures are DWORD aligned (four bytes) when stored in memory. Fixed-length strings use two bytes for every character to account for UNICODE. String descriptors use four bytes each. Integers use two bytes. Please refer to the Visual Basic Help file for the lengths of all the other data types.

Example One
Consider this example UDT: Type Generic FirstName as String * 5 LastName as String ChildrenAges (1 to 5) as Byte End Type This UDT requires the following number of bytes:


 * FirstName uses 10 bytes (UNICODE).
 * LastName uses 4 bytes (String descriptor).
 * ChildrenAges uses 5 bytes (5-element byte array).

Applying DWORD alignment gives a total of 21 bytes as follows:


 * 8 bytes for the first 8 bytes of FirstName.
 * 8 bytes for the last 2 bytes of FirstName, 2 bytes of padding, 4 bytes for LastName.
 * 5 bytes for the 5 bytes needed for ChildrenAges.

Therefore: LenB(Generic) = 21 Len (Generic) = 14

Example Two
Consider this example UDT: Type Generic FirstName as String * 7 LastName as String * 6 ChildrenAges (1 to 5) as Byte Address * String End Type This UDT requires the following number of bytes:


 * FirstName uses 14 bytes (UNICODE).
 * LastName uses 12 bytes (UNICODE).
 * ChildrenAges uses 5 bytes (5-element byte array).
 * Address uses 4 bytes (string descriptor)

Applying DWORD alignment gives a total of 36 bytes as follows:


 * 8 bytes for the first 8 bytes of FirstName.
 * 8 bytes for the last 6 bytes of FirstName, 2 bytes of padding, 2 bytes for LastName.
 * 8 bytes for the next 8 bytes of LastName.
 * 8 bytes for the last 2 bytes of LastName, 5 bytes for ChildrenAges, and 1 byte of padding.
 * 4 bytes for Address for the string descriptor.

Therefore: LenB(Generic) = 36 Len (Generic) = 22

Keywords: kbinfo kb32bitonly kbenv kbprogramming KB137729

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.