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

LayoutKind-Enumeration

 

Veröffentlicht: Oktober 2016

Steuert das Layout eines Objekts beim Exportieren in nicht verwalteten Code.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum LayoutKind

MembernameBeschreibung
Auto

Automatisch wählt die Laufzeit ein entsprechende Layout für die Member eines Objekts in nicht verwalteten Speicher. Mit diesem Enumerationsmember definierten Objekte können nicht außerhalb von verwaltetem Code verfügbar gemacht werden. Versuch wird eine Ausnahme generiert.

Explicit

Die genaue Position der einzelnen Member eines Objekts in nicht verwaltetem Speicher explizit gesteuert wird, gemäß der Einstellung der StructLayoutAttribute.Pack Feld. Jedes Member verwenden, muss die FieldOffsetAttribute auf die Position dieses Felds im Typ anzugeben.

Sequential

Die Member des Objekts werden sequenziell in der Reihenfolge angeordnet, in denen sie angezeigt, beim Exportieren in nicht verwalteten Speicher werden. Die Elemente im angegebenen angelegt StructLayoutAttribute.Pack, nicht zusammenhängende möglich.

Diese Enumeration wird zusammen mit StructLayoutAttribute. Die common Language Runtime verwendet die Auto standardmäßig Layoutwert. Zum Reduzieren der Layout-bezogene Probleme im Zusammenhang mit der Auto -Wert, c#, Visual Basic und C++-Compiler geben Sequential Layout für Werttypen.

System_CAPS_importantWichtig

Die StructLayoutAttribute.Pack Feld steuert die Ausrichtung der Datenfelder und wirkt sich daher auf das Layout unabhängig von der LayoutKind von Ihnen angegebene Wert. Standardmäßig wird der Wert der Pack ist 0, womit die Standardkomprimierungsgröße für die aktuelle Plattform. Z. B. bei Verwendung der Explicit Layout Wert und geben Sie die Ausrichtungen Feld auf Byte-Grenzen, müssen Sie festlegen Pack auf 1 fest, um das gewünschte Ergebnis zu erhalten.

Das folgende Beispiel zeigt die verwaltete Deklaration der PtInRect -Funktion, die überprüft, ob ein Punkt innerhalb eines Rechtecks befindet, und definiert einen Point Struktur mit Sequential Layout und ein Rect Struktur mit Explicit Layout.

enum Bool
{
   False = 0,
   True
};
[StructLayout(LayoutKind.Sequential)]
public struct Point 
{
   public int x;
   public int y;
}   

[StructLayout(LayoutKind.Explicit)]
public struct Rect 
{
   [FieldOffset(0)] public int left;
   [FieldOffset(4)] public int top;
   [FieldOffset(8)] public int right;
   [FieldOffset(12)] public int bottom;
}   

class LibWrapper
{
   [DllImport("user32.dll", CallingConvention=CallingConvention.StdCall)]
   public static extern Bool PtInRect(ref Rect r, Point p);
};

class TestApplication
{
   public static void Main()
   {
      try
      {
         Bool bPointInRect = 0;
         Rect myRect = new Rect();
         myRect.left = 10;
         myRect.right = 100;
         myRect.top = 10;
         myRect.bottom = 100;
         Point myPoint = new Point();
         myPoint.x = 50;
         myPoint.y = 50;
         bPointInRect = LibWrapper.PtInRect(ref myRect, myPoint);
         if(bPointInRect == Bool.True)
            Console.WriteLine("Point lies within the Rect");
         else
            Console.WriteLine("Point did not lie within the Rect");
      }
      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
Zurück zum Anfang
Anzeigen: