Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

StructLayoutAttribute, classe

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

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

Espace de noms :  System.Runtime.InteropServices
Assembly :  mscorlib (dans mscorlib.dll)
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class StructLayoutAttribute : Attribute

Le type StructLayoutAttribute expose les membres suivants.

  Nom Description
Méthode publique StructLayoutAttribute(Int16) Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié.
Méthode publique Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif StructLayoutAttribute(LayoutKind) Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié.
Début
  Nom Description
Propriété publique TypeId Lors de son implémentation dans une classe dérivée, obtient un identificateur unique pour Attribute. (Hérité de Attribute.)
Propriété publique 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif Value Obtient la valeur LayoutKind qui spécifie la façon dont la classe ou la structure est disposée.
Début
  Nom Description
Méthode publique Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif Equals Infrastructure. Retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute.)
Méthode protégée Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif GetHashCode Retourne le code de hachage pour cette instance. (Hérité de Attribute.)
Méthode publique Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publique IsDefaultAttribute 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.)
Méthode publique Pris en charge par XNA Framework Match En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute.)
Méthode protégée Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif MemberwiseClone Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode publique Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif ToString Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.)
Début
  Nom Description
Champ public Pris en charge par XNA Framework CharSet 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.
Champ public Pack Contrôle l'alignement des champs de données d'une classe ou d'une structure en mémoire.
Champ public Pris en charge par XNA Framework 06sb63ba.PortableClassLibrary(fr-fr,VS.100).gif Size Indique la taille absolue de la classe ou la structure.
Début
  Nom Description
Implémentation d'interface explicite Méthode privée _Attribute.GetIDsOfNames Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de Attribute.)
Implémentation d'interface explicite Méthode privée _Attribute.GetTypeInfo 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.)
Implémentation d'interface explicite Méthode privée _Attribute.GetTypeInfoCount Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). (Hérité de Attribute.)
Implémentation d'interface explicite Méthode privée _Attribute.Invoke Fournit l'accès aux propriétés et aux méthodes exposées par un objet. (Hérité de Attribute.)
Début

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

En général, le Common Language Runtime contrôle la disposition physique des champs de données d'une classe ou d'une structure en mémoire managée. Toutefois, si vous souhaitez réorganiser les besoins de la classe ou de la structure d'une certaine façon, vous pouvez utiliser StructLayoutAttribute. Il est important de pouvoir contrôler explicitement la disposition d'une classe lorsqu'elle doit être passée à du code non managé attendant une disposition spécifique. La valeur Sequential de LayoutKind est utilisée pour forcer la présentation séquentielle des membres dans l'ordre dans lequel ils apparaissent. Explicit contrôle la position précise de chaque donnée membre. Avec Explicit, chaque membre doit utiliser FieldOffsetAttribute pour indiquer la position de ce champ dans le type.

Les compilateurs C#, Visual Basic et C++ appliquent par défaut la valeur de disposition Sequential aux structures. Pour les classes, vous devez appliquer la valeur Sequential explicitement. L'outil Tlbimp.exe (Type Library Importer) applique également cet attribut ; il applique toujours la valeur Sequential lorsqu'il importe une bibliothèque de types.

L'exemple suivant illustre une déclaration managée de la fonction GetSystemTime et définit la classe MySystemTime avec une disposition LayoutKind.Explicit. 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);
         }
      }
   }
}


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Pris en charge dans :

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ