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
|
StructLayoutAttribute, classe
Vous permet de contrôler la disposition physique des champs de données d'une classe ou d'une structure.
Assembly : mscorlib (dans mscorlib.dll)
Le type StructLayoutAttribute expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
StructLayoutAttribute(Int16) | Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié. |
|
StructLayoutAttribute(LayoutKind) | Initialise une nouvelle instance de la classe StructLayoutAttribute avec le membre de l'énumération System.Runtime.InteropServices.LayoutKind spécifié. |
| Nom | Description | |
|---|---|---|
|
Equals | Infrastructure. Retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute.) |
|
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.) |
|
GetHashCode | Retourne le code de hachage pour cette instance. (Hérité de Attribute.) |
|
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) |
|
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.) |
|
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.) |
|
MemberwiseClone | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
ToString | Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.) |
| Nom | Description | |
|---|---|---|
|
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. |
|
Pack | Contrôle l'alignement des champs de données d'une classe ou d'une structure en mémoire. |
|
Size | Indique la taille absolue de la classe ou la structure. |
| Nom | Description | |
|---|---|---|
|
_Attribute.GetIDsOfNames | Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de Attribute.) |
|
_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.) |
|
_Attribute.GetTypeInfoCount | Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). (Hérité de Attribute.) |
|
_Attribute.Invoke | 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.
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); } } } }
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.