Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

StructLayoutAttribute classe

 

Date de publication : novembre 2016

Vous permet de contrôler la disposition physique des champs de données d'une classe ou d'une structure en mémoire.

Espace de noms:   System.Runtime.InteropServices
Assembly:  mscorlib (dans mscorlib.dll)

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

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

NomDescription
System_CAPS_pubmethodStructLayoutAttribute(Int16)

Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié.

System_CAPS_pubmethodStructLayoutAttribute(LayoutKind)

Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié.

NomDescription
System_CAPS_pubpropertyTypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.(Hérité de Attribute.)

System_CAPS_pubpropertyValue

Obtient la valeur LayoutKind qui spécifie la façon dont la classe ou la structure est disposée.

NomDescription
System_CAPS_pubmethodEquals(Object)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Retourne une valeur qui indique si cette instance est égale à un objet spécifié.(Hérité de Attribute.)

System_CAPS_pubmethodGetHashCode()

Retourne le code de hachage de cette instance.(Hérité de Attribute.)

System_CAPS_pubmethodGetType()

Obtient le Type de l'instance actuelle.(Hérité de Object.)

System_CAPS_pubmethodIsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.(Hérité de Attribute.)

System_CAPS_pubmethodMatch(Object)

En cas de substitution dans une classe dérivée, retourne une valeur qui indique si cette instance équivaut à un objet spécifié.(Hérité de Attribute.)

System_CAPS_pubmethodToString()

Retourne une chaîne qui représente l'objet actuel.(Hérité de Object.)

NomDescription
System_CAPS_pubfieldCharSet

Indique si les champs de données de type chaîne de la classe doivent être marshalés en tant que LPWSTR ou LPSTR par défaut.

System_CAPS_pubfieldPack

Contrôle l'alignement des champs de données d'une classe ou d'une structure en mémoire.

System_CAPS_pubfieldSize

Indique la taille absolue de la classe ou la structure.

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

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.(Hérité de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.(Hérité de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).(Hérité de Attribute.)

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

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.(Hérité de Attribute.)

Vous pouvez appliquer cet attribut à des classes ou des structures.

Le common language runtime contrôle la disposition physique des champs de données d’une classe ou une structure en mémoire managée. Toutefois, si vous souhaitez passer le type de code non managé, vous pouvez utiliser la StructLayoutAttribute attribut pour contrôler la disposition du type non managée. Utilisez l’attribut avec LayoutKind.Sequential pour forcer les membres à être disposés séquentiellement dans l’ordre d’apparition. LayoutKind.Sequential Contrôle la disposition dans la mémoire managée et la disposition de mémoire non managée. Pour les types non blittables, il contrôle la disposition lors de la classe ou structure est marshalée au code non managé, mais ne contrôle pas la mise en page dans la mémoire managée. Utilisez l’attribut avec LayoutKind.Explicit pour contrôler la position précise de chaque membre de données. Cela affecte la disposition gérée et, pour les types blittables et non blittables. À l’aide de LayoutKind.Explicit exige que vous utilisiez le FieldOffsetAttribute pour indiquer la position de chaque champ dans le type d’attribut.

Les compilateurs c#, Visual Basic et C++ appliquent la Sequential valeur de disposition pour les structures par défaut. Pour les classes, vous devez appliquer le LayoutKind.Sequential valeur explicitement. Le Tlbimp.exe (Type Library Importer) s’applique également la StructLayoutAttribute attribut ; il s’applique toujours le LayoutKind.Sequential lorsqu’il importe une bibliothèque de types de valeur.

L’exemple suivant illustre une déclaration managée de la GetSystemTime la fonction et définit MySystemTime classe LayoutKind.Explicit mise en page. GetSystemTime Obtient l’heure système et l’imprime sur la console.

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1

Tous les membres statiques publics ( Shared en Visual Basic) de ce type sont thread-safe. Les membres d’instance n’ont pas la garantie d’être thread-safe.

Retour au début
Afficher: