Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

StructLayoutAttribute-Klasse

 

Veröffentlicht: Oktober 2016

Hiermit können Sie das physikalische Layout der Datenfelder einer Klasse oder Struktur im Speicher steuern.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Attribute
    System.Runtime.InteropServices.StructLayoutAttribute

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct, 
	Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class StructLayoutAttribute : Attribute

NameBeschreibung
System_CAPS_pubmethodStructLayoutAttribute(Int16)

Initialisiert eine neue Instanz der StructLayoutAttribute-Klasse mit dem angegebenen System.Runtime.InteropServices.LayoutKind-Enumerationsmember.

System_CAPS_pubmethodStructLayoutAttribute(LayoutKind)

Initialisiert eine neue Instanz der StructLayoutAttribute-Klasse mit dem angegebenen System.Runtime.InteropServices.LayoutKind-Enumerationsmember.

NameBeschreibung
System_CAPS_pubpropertyTypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.)

System_CAPS_pubpropertyValue

Ruft den LayoutKind-Wert ab, der angibt, wie die Klasse oder Struktur angeordnet ist.

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetHashCode()

Gibt den Hashcode für diese Instanz zurück.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodIsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodMatch(Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

NameBeschreibung
System_CAPS_pubfieldCharSet

Gibt an, ob Zeichenfolgendatenfelder in der Klasse standardmäßig als LPWSTR oder als LPSTR gemarshallt werden müssen.

System_CAPS_pubfieldPack

Steuert die Ausrichtung der Datenfelder einer Klasse oder Struktur im Speicher.

System_CAPS_pubfieldSize

Gibt die absolute Größe der Klasse oder Struktur an.

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.(Geerbt von „Attribute“.)

Dieses Attribut kann auf Klassen oder Strukturen angewendet werden.

Die common Language Runtime steuert das physische Layout der Datenfelder einer Klasse oder Struktur im verwalteten Speicher. Wenn Sie den nicht verwalteten Code übergeben möchten, Sie können jedoch die StructLayoutAttribute Attribut, das nicht verwaltete Layout des Typs steuern. Das Attribut mit LayoutKind.Sequential die Member sequenziell in der Reihenfolge angeordnet werden, sie angezeigt werden. Für LayoutKind.Sequential steuert des Layouts im verwalteten Speicher und das Layout im nicht verwalteten Speicher. Für nicht blitfähige Typen steuert er das Layout, wenn die Klasse oder Struktur an nicht verwalteten Code gemarshallt wird, steuert jedoch nicht das Layout im verwalteten Speicher. Das Attribut mit LayoutKind.Explicit die genaue Position der einzelnen Datenmember steuert. Dies betrifft sowohl verwaltete als auch nicht verwaltete Layout für blitfähige und nicht blitfähige Typen. Mithilfe von LayoutKind.Explicit erfordert die Verwendung der FieldOffsetAttribute Attribut, um die Position jedes Felds innerhalb des Typs anzugeben.

Anwenden von c#, Visual Basic und C++-Compiler die Sequential Layoutwert standardmäßig auf Strukturen. Für Klassen, gilt die LayoutKind.Sequential -Wert explizit. Die Tlbimp.exe (Type Library Importer) gilt auch für die StructLayoutAttribute -Attribut; es gilt immer die LayoutKind.Sequential Wert beim Importieren einer Typbibliothek.

Das folgende Beispiel veranschaulicht eine verwaltete Deklaration der GetSystemTime -Funktion und definiert MySystemTime -Klasse mit LayoutKind.Explicit Layout. GetSystemTime Ruft die Systemzeit ab und wird in der Konsole.

using System;
using System.Runtime.InteropServices;

namespace InteropSample
{   

   [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);
         }
      }
   }
}

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: