Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

StructLayoutAttribute (Clase)

Le permite controlar el diseño físico de los campos de datos de una clase o una estructura.

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

Espacio de nombres:  System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

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

El tipo StructLayoutAttribute expone los siguientes miembros.

  NombreDescripción
Método públicoStructLayoutAttribute(Int16)Inicializa una nueva instancia de la clase StructLayoutAttribute con el miembro de enumeración System.Runtime.InteropServices.LayoutKind especificado.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsStructLayoutAttribute(LayoutKind)Inicializa una nueva instancia de la clase StructLayoutAttribute con el miembro de enumeración System.Runtime.InteropServices.LayoutKind especificado.
Arriba

  NombreDescripción
Propiedad públicaTypeIdCuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Se hereda de Attribute).
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsValueObtiene el valor de LayoutKind que especifica la forma en que está organizada la clase o estructura.
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEqualsInfraestructura. Devuelve un valor que indica si esta instancia equivale al objeto especificado. (Se hereda de Attribute).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCodeDevuelve el código hash de esta instancia. (Se hereda de Attribute).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoIsDefaultAttributeCuando se invalida en una clase derivada, indica si el valor de esta instancia es el valor predeterminado para la clase derivada. (Se hereda de Attribute).
Método públicoCompatible con XNA FrameworkMatch Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual al objeto especificado. (Se hereda de Attribute).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

  NombreDescripción
Campo públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCharSetIndica si las referencias de los campos de datos de cadena dentro de la clase deben calcularse como LPWSTR o LPSTR de forma predeterminada.
Campo públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPackControla la alineación de los campos de datos de una clase o una estructura en la memoria.
Campo públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSizeIndica el tamaño absoluto de la clase o estructura.
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privado_Attribute.GetIDsOfNamesAsigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.GetTypeInfoObtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.GetTypeInfoCount

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.InvokeProporciona acceso a las propiedades y los métodos expuestos por un objeto. (Se hereda de Attribute).
Arriba

Este atributo se puede aplicar a clases o estructuras.

Common Language Runtime controla el diseño físico de los campos de datos de una clase o estructura en la memoria administrada. Sin embargo, si desea pasar el tipo al código no administrado, puede utilizar el atributo de StructLayoutAttribute para controlar el diseño tipo no. Utilice el atributo con LayoutKind.Sequential para obligar a los miembros que se mostrarán secuencialmente en el orden en que aparecen. Para tipos que pueden transferirse en bloque de bits, LayoutKind.Sequential controla el diseño en la memoria administrada y el diseño en memoria no administrada. Para tipos que no pueden transferirse en bloque de bits, controla el diseño cuando la clase o estructura se calculan en el código no administrado, pero no controla el diseño en la memoria administrada. utilice el atributo con LayoutKind.Explicit para controlar la posición exacta de cada miembro de datos. Esto afecta diseño administrado y no administrado, para los tipos que pueden transferirse en bloque de bits y que no pueden transferirse en bloque de bits. Mediante LayoutKind.Explicit requiere que se utilice el atributo de FieldOffsetAttribute para indicar la posición de cada campo del tipo.

Los compiladores de C#, Visual Basic y C++ aplican a las estructuras el valor de diseño Sequential de manera predeterminada. Para las clases, el valor LayoutKind.Sequential debe aplicarse explícitamente. TlbImp.exe (Importador de la biblioteca de tipos) También se aplica el atributo de StructLayoutAttribute ; aplica siempre el valor de LayoutKind.Sequential cuando importa una biblioteca de tipos.

En el ejemplo siguiente se muestra una declaración administrada de la función GetSystemTime y se define la clase MySystemTime con diseño LayoutKind.Explicit. GetSystemTime obtiene la hora del sistema y la imprime en la consola.


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

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros públicos static (Shared en Visual Basic) de este tipo son seguros para subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft