System.Runtime.InteropServices.StructLayoutAttribute Class

Assembly: Mscorlib.dll
Namespace: System.Runtime.InteropServices
Summary
The StructLayoutAttribute class allows the user to control the physical layout of the data fields of a class or structure.
C# Syntax:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class StructLayoutAttribute : Attribute
Remarks
You can apply this attribute to classes or structures.

Typically, the common language runtime controls the physical layout of the data fields of a class or structure in managed memory. If the class or structure needs to be arranged a certain way, you can use StructLayoutAttribute. Explicit control of a class layout is important if the class is to be passed to unmanaged code that expects a specific layout. The LayoutKind value Sequential is used to force the members to be laid out sequentially in the order they appear.Explicit is used to control the precise position of each data member. With Explicit, each member must use the FieldOffsetAttribute to indicate the position of that field within the type.

Example
Demonstrates a managed declaration of the GetSystemTime function and defines MySystemTime class with LayoutKind.Explicit layout. The GetSystemTime get the system time and print to the console.
   [StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
   public class MySystemTime 
   {
      [FieldOffset(0)]public ushort wYear; 
      [FieldOffset(2)]public ushort wMonth;
      [FieldOffset(4)]public ushort wDayOfWeek; 
      [FieldOffset(6)]public ushort wDay; 
      [FieldOffset(8)]public ushort wHour; 
      [FieldOffset(10)]public ushort wMinute; 
      [FieldOffset(12)]public ushort wSecond; 
      [FieldOffset(14)]public ushort wMilliseconds; 
   }

   class LibWrapper
   {
      [DllImport("kernel32.dll")]
      public static extern void GetSystemTime([MarshalAs(UnmanagedType.LPStruct)]MySystemTime st);
   };

   class TestApplication
   {      
      public static void Main()
      {
         try
         {
            MySystemTime sysTime = new MySystemTime();
            LibWrapper.GetSystemTime(sysTime);
            Console.WriteLine("The System time is {0}/{1}/{2} {3}:{4}:{5}", sysTime.wDay,
               sysTime.wMonth, sysTime.wYear, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);            
         }         
         catch(TypeLoadException e)
         {
            Console.WriteLine("TypeLoadException : " + e.Message);
         }
         catch(Exception e)
         {
            Console.WriteLine("Exception : " + e.Message);
         }
      }
   }

    
See also:
System.Runtime.InteropServices Namespace

System.Runtime.InteropServices.StructLayoutAttribute Member List:

Public Constructors
ctor #1 Overloaded:
.ctor(short layoutKind)

Initalizes a new instance of the StructLayoutAttribute class with the specified LayoutKind value.
ctor #2 Overloaded:
.ctor(LayoutKind layoutKind)

Initalizes a new instance of the StructLayoutAttribute class with the specified LayoutKind value.
Public Fields
CharSet Indicates how string data fields within the class should be marshaled.
Pack Controls the alignment of data fields of a class or structure in memory.
Size Indicates the absolute size of the structure or class.
Public Properties
TypeId
(inherited from System.Attribute)
Read-only

See base class member description: System.Attribute.TypeId


When implemented in a derived class, gets a unique identifier for this Attribute.
Value Read-only

Gets the LayoutKind value that specifies how the class or structure is arranged.
Public Methods
Equals
(inherited from System.Object)
See base class member description: System.Object.Equals

Derived from System.Object, the primary base class for all objects.
GetHashCode
(inherited from System.Attribute)
See base class member description: System.Attribute.GetHashCode


Returns the hash code for this instance.
GetType
(inherited from System.Object)
See base class member description: System.Object.GetType

Derived from System.Object, the primary base class for all objects.
IsDefaultAttribute
(inherited from System.Attribute)
See base class member description: System.Attribute.IsDefaultAttribute


When overridden in a derived class, returns an indication whether the value of this instance is the default value for the derived class.
Match
(inherited from System.Attribute)
See base class member description: System.Attribute.Match


When overridden in a derived class, returns a value indicating whether this instance equals a specified object.
ToString
(inherited from System.Object)
See base class member description: System.Object.ToString

Derived from System.Object, the primary base class for all objects.
Protected Methods
Finalize
(inherited from System.Object)
See base class member description: System.Object.Finalize

Derived from System.Object, the primary base class for all objects.
MemberwiseClone
(inherited from System.Object)
See base class member description: System.Object.MemberwiseClone

Derived from System.Object, the primary base class for all objects.

Hierarchy:


System.Runtime.InteropServices.StructLayoutAttribute Member Details

Overloaded ctor #1
Summary
Initalizes a new instance of the StructLayoutAttribute class with the specified LayoutKind value.
C# Syntax:
public StructLayoutAttribute(
   short layoutKind
);
Parameters:

layoutKind

The LayoutKind value that specifes how the class or structure should be arranged.

Return to top


Overloaded ctor #2
Summary
Initalizes a new instance of the StructLayoutAttribute class with the specified LayoutKind value.
C# Syntax:
public StructLayoutAttribute(
   LayoutKind layoutKind
);
Parameters:

layoutKind

The LayoutKind value that specifes how the class or structure should be arranged.

Return to top


Field: CharSet
Summary
Indicates how string data fields within the class should be marshaled.
C# Syntax:
public CharSet CharSet;
Remarks
If the CharSet field is set to CharSet.Unicode, all string arguments are converted to Unicode characters before being passed to the unmanaged implementation. If the field is set to CharSet.Ansi, the strings are converted to ANSI strings. If the CharSet field is set to CharSet.Auto, the conversion is platform dependent (Unicode on Windows NT and ANSI on Windows 98).

Return to top


Field: Pack
Summary
Controls the alignment of data fields of a class or structure in memory.
C# Syntax:
public int Pack;
Remarks
This field indicates the packing size that should be used when the LayoutKindSequential value is specified. The value of Pack is required to be 0, 1, 2, 4, 8, 16, 32, 64, or 128. A value of 0 indicates that the packing alignment is set to the default for the current platform.

The default packing size is 8.

Return to top


Field: Size
Summary
Indicates the absolute size of the structure or class.
C# Syntax:
public int Size;
Remarks
Must be greater or equal to the sum of all members. This field is primarily for compiler writers use.

Return to top


Property: TypeId (read-only)
Inherited
See base class member description: System.Attribute.TypeId

Summary
When implemented in a derived class, gets a unique identifier for this Attribute.
C# Syntax:
public virtual object TypeId {get;}
Remarks
As implemented, this identifier is merely the Type of the attribute. However, it is intended that the unique identifier be used to identify two attributes of the same type.

Return to top


Property: Value (read-only)
Summary
Gets the LayoutKind value that specifies how the class or structure is arranged.
C# Syntax:
public LayoutKind Value {get;}

Return to top


Method: Equals(
   object obj
)
Inherited
See base class member description: System.Object.Equals
C# Syntax:
public virtual bool Equals(
   object obj
);

For more information on members inherited from System.Object click on the link above.

Return to top


Method: Finalize()
Inherited
See base class member description: System.Object.Finalize
C# Syntax:
~StructLayoutAttribute();

For more information on members inherited from System.Object click on the link above.

Return to top


Method: GetHashCode()
Inherited
See base class member description: System.Attribute.GetHashCode

Summary
Returns the hash code for this instance.
C# Syntax:
public override int GetHashCode();
Return Value:
A 32-bit signed integer hash code.

Return to top


Method: GetType()
Inherited
See base class member description: System.Object.GetType
C# Syntax:
public Type GetType();

For more information on members inherited from System.Object click on the link above.

Return to top


Method: IsDefaultAttribute()
Inherited
See base class member description: System.Attribute.IsDefaultAttribute

Summary
When overridden in a derived class, returns an indication whether the value of this instance is the default value for the derived class.
C# Syntax:
public virtual bool IsDefaultAttribute();
Return Value:
true if this instance is the default attribute for the class; otherwise, false.
Remarks
The default implementation of this class returns false, and must be implemented in the derived class to be useful to that class.

The implementation of this method in a derived class compares the value of this instance to a standard, default value obtained by some means, then returns a Boolean value that indicates whether the value of this instance is equal to the standard. The standard value is typically coded as a constant in the implementation, or stored programmatically in a field used by the implementation.

Return to top


Method: Match(
   object obj
)
Inherited
See base class member description: System.Attribute.Match

Summary
When overridden in a derived class, returns a value indicating whether this instance equals a specified object.
C# Syntax:
public virtual bool Match(
   object obj
);
Parameters:

obj

An Object to compare with this instance of Attribute.

Return Value:
true if this instance equals obj; otherwise, false.
Remarks
This method determines if one Attribute equals another. Its default implementation is the same as Attribute.Equals, which performs a value and reference comparison. Override this method to implement support for attribute values, such as flags or bitfields, that consist of components that are meaningful in themselves. For example, consider an attribute whose value is a binary field divided into a bitfield of flags. Two instances of this attribute have one flag in set in common while all the other flags differ. The Equal method cannot determine that the two instances have the same flag set, but the Match method can.

Return to top


Method: MemberwiseClone()
Inherited
See base class member description: System.Object.MemberwiseClone
C# Syntax:
protected object MemberwiseClone();

For more information on members inherited from System.Object click on the link above.

Return to top


Method: ToString()
Inherited
See base class member description: System.Object.ToString
C# Syntax:
public virtual string ToString();

For more information on members inherited from System.Object click on the link above.

Return to top


Top of page

Copyright (c) 2002 Microsoft Corporation. All rights reserved.