Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

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)

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

Le type StructLayoutAttribute expose les membres suivants.

  NomDescription
Méthode publiqueStructLayoutAttribute(Int16)Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStructLayoutAttribute(LayoutKind)Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié.
Début

  NomDescription
Propriété publiqueTypeIdLors de son implémentation dans une classe dérivée, obtient un identificateur unique pour Attribute. (Hérité de Attribute.)
Propriété publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreValueObtient la valeur LayoutKind qui spécifie la façon dont la classe ou la structure est disposée.
Début

  NomDescription
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreEqualsInfrastructure. Retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute.)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreGetHashCodeRetourne le code de hachage de cette instance. (Hérité de Attribute.)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreGetTypeObtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publiqueIsDefaultAttributeEn 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 publiquePris en charge par XNA FrameworkMatchEn 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 publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreToStringRetourne une chaîne qui représente l'objet actif. (Hérité de Object.)
Début

  NomDescription
Champ publicPris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreCharSetIndique 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 publicPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StorePackContrôle l'alignement des champs de données d'une classe ou d'une structure en mémoire.
Champ publicPris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreSizeIndique la taille absolue de la classe ou la structure.
Début

  NomDescription
Implémentation d'interface expliciteMéthode privée_Attribute.GetIDsOfNamesMappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée_Attribute.GetTypeInfoRé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 expliciteMéthode privée_Attribute.GetTypeInfoCountRé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 expliciteMéthode privée_Attribute.InvokeFournit 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.

Toutefois, si vous souhaitez passer le type à du code non managé, utilisez l'attribut StructLayoutAttribute pour contrôler la disposition non managée du type. La valeur de LayoutKind.Sequential est utilisée pour forcer la présentation séquentielle des membres dans l'ordre dans lequel ils apparaissent. Pour lestypes blittables, LayoutKind.Sequential contrôle la disposition en mémoire managée et la disposition en mémoire non managée. Pour les types non blittables, elle contrôle la disposition lorsque la classe ou la structure est marshalée au code non managé, mais ne contrôle pas la disposition en mémoire managée. L'attribut LayoutKind.Explicit est défini pour contrôler la position précise de chaque donnée membre. Cela affecte la disposition managée et non managée, pour les types blittables et non blittables. Utiliser LayoutKind.Explicit requiert que vous utilisiez l'attribut FieldOffsetAttribute pour indiquer la position de chaque 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 LayoutKind.Sequential explicitement. Le Tlbimp.exe (Type Library Importer) applique aussi l'attribut StructLayoutAttribute il applique toujours la valeur LayoutKind.Sequentialquand il importe une librairie de type.

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.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

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.

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft