88 of 158
82 discussion below relating to sub-byte types and alignment). It is important to note that recursive structure definitions, with members that are or contain (directly or indirectly) the structure being defined, are not allowed. Examples Structure MyDate Public year as UnsignedInteger Public month as Byte Public day as Byte End Structure Structure MyTime Public hour as Byte Public minute as Byte Public seconds as Single End Structure Structure MyTimeStamp Public tdate as MyDate Public ttime as MyTime Private isCurrent as Boolean End Structure Sub Main() Dim ts as MyTimeStamp Call GetTimeStamp(ts.tdate.year, ts.tdate.month, ts.tdate.day, _ ts.ttime.hour, ts.ttime.minute, ts.ttime.seconds) End Sub The example above illustrates how members of an instance of a structure are referenced. The variable ts is an instance of the MyTimeStamp structure. A member is referenced by appending the member name to the variable name, separating them with a period. For members that are structures, members of the subordinate structure are referred to similarly. No spaces are allowed in this construction. In cases where a variable or a member is an array, the index list directly follows the variable/member name, preceding the period. Structure foo Dim b as Byte Dim ai(1 to 10) as Integer Dim ts(1 to 4) as MyTimeStamp End Structure Dim yr as UnsignedInteger Dim i as Integer Dim f as foo Dim b as Byte i = f.ai(b) yr = f.ts(3).tdate.year The address of a member of a variable that is a structure may be obtained by appending the .DataAddress property identifier to the reference or by using the MemAddress() function. Dim addr as UnsignedInteger addr = ts.tdate.DataAddress addr = MemAddressU(ts.tdate)