MarshalAsAttribute MarshalAsAttribute MarshalAsAttribute MarshalAsAttribute Class

Definición

Indica cómo calcular las referencias de los datos entre el código administrado y el código no administrado.Indicates how to marshal the data between managed and unmanaged code.

public ref class MarshalAsAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class MarshalAsAttribute : Attribute
type MarshalAsAttribute = class
    inherit Attribute
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
Herencia
MarshalAsAttributeMarshalAsAttributeMarshalAsAttributeMarshalAsAttribute
Atributos

Ejemplos

El ejemplo siguiente se aplica el MarshalAsAttribute a un campo, un parámetro de método y un método el valor devuelto en un tipo administrado.The following example applies the MarshalAsAttribute to a field, a method parameter, and a method return value in a managed type.

using System;
using System.Text;
using System.Runtime.InteropServices;


class Program
{

//Applied to a parameter.
  public void M1([MarshalAs(UnmanagedType.LPWStr)]String msg) {}


//Applied to a field within a class.
  class MsgText {
                [MarshalAs(UnmanagedType.LPWStr)]
                public String msg = "Hello World";
                }

//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
    public String GetMessage()
    {
        return "Hello World";
    }


static void Main(string[] args)
    {  }
}
Imports System.Runtime.InteropServices

Module Module1

    Sub Main()

    End Sub

    'Applied to a parameter.
    Public Sub M1(<MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal msg As String)
        msg = msg + "Goodbye"
    End Sub

    'Applied to a field within a class.
    Class MsgText
        <MarshalAsAttribute(UnmanagedType.LPWStr)> Public msg As String
    End Class

    'Applied to a return value.
    Public Function M2() As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
        Return "Hello World"
    End Function

End Module

El ejemplo siguiente se aplica el MarshalAsAttribute a una propiedad de atributo:The following example applies the MarshalAsAttribute attribute to a property:

decimal _money;   

public decimal Money 
{
   [return: MarshalAs(UnmanagedType.Currency)]
   get { return this._money; }
   [param: MarshalAs(UnmanagedType.Currency)]
   set { this._money = value; }
}
Dim _money As Decimal   

Public Property Money As <MarshalAs(UnmanagedType.Currency)> Decimal 
   Get
      Return Me._money
   End Get
   Set(<MarshalAs(UnmanagedType.Currency)> value As Decimal)
      Me._money = value
   End Set   
End Property

Comentarios

Puede aplicar este atributo a parámetros, campos o valores devueltos.You can apply this attribute to parameters, fields, or return values.

Este atributo es opcional, ya que cada tipo de datos tiene un comportamiento de serialización predeterminado.This attribute is optional, as each data type has a default marshaling behavior. Este atributo solo es necesario cuando se puede serializar un tipo determinado a varios tipos.This attribute is only necessary when a given type can be marshaled to multiple types. Por ejemplo, puede calcular las referencias de una cadena a código no administrado como un LPStr, un LPWStr, un LPTStr, o un BStr.For example, you can marshal a string to unmanaged code as either a LPStr, a LPWStr, a LPTStr, or a BStr. De forma predeterminada, common language runtime calcula las referencias de un parámetro de cadena como un BStr a métodos COM.By default, the common language runtime marshals a string parameter as a BStr to COM methods. Puede aplicar el MarshalAsAttribute atributo a un campo individual o un parámetro para hacer que esa cadena concreta que serializarse como un LPStr en lugar de un BStr.You can apply the MarshalAsAttribute attribute to an individual field or parameter to cause that particular string to be marshaled as a LPStr instead of a BStr. El Tlbexp.exe (exportador de biblioteca) pasa las preferencias del cálculo de referencias a common language runtime.The Tlbexp.exe (Type Library Exporter) passes your marshaling preferences to the common language runtime.

Algunos parámetros y valores devueltos tienen predeterminada diferente cuando se usa con la interoperabilidad COM de comportamiento de serialización o la invocación de plataforma.Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. De forma predeterminada, el runtime calcula las referencias de un parámetro de cadena (y los campos de un tipo de valor) como un LPStr a una plataforma de invocación de método o función.By default, the runtime marshals a string parameter (and fields in a value type) as a LPStr to a platform invoke method or function. Para obtener más información, consulte comportamiento de serialización predeterminado.For additional information, see Default Marshaling Behavior.

En la mayoría de los casos, el atributo identifica simplemente el formato de los datos no administrados mediante el UnmanagedType enumeración, como se muestra en la siguiente firma de C#:In most cases, the attribute simply identifies the format of the unmanaged data using the UnmanagedType enumeration, as shown in the following C# signature:

public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)

Algunos UnmanagedType miembros de la enumeración requieren información adicional.Some UnmanagedType enumeration members require additional information. Por ejemplo, se necesita información adicional cuando la UnmanagedType es LPArray.For example, additional information is needed when the UnmanagedType is LPArray. Para obtener una descripción completa de cómo utilizar este atributo con matrices, vea serialización predeterminada para matrices.For a complete description of how to use this attribute with arrays, see Default Marshaling for Arrays.

El Tlbimp.exe (importador de biblioteca) también se aplica este atributo a parámetros, campos y valores devueltos para indicar que el tipo de datos en la biblioteca de tipos de entrada no es el tipo predeterminado para el tipo de datos administrado correspondiente.The Tlbimp.exe (Type Library Importer) also applies this attribute to parameters, fields, and return values to indicate that the data type in the input type library is not the default type for the corresponding managed data type. Tlbimp.exe siempre se aplica el MarshalAsAttribute a String y Object tipos para mayor claridad, independientemente del tipo especificado en la biblioteca de tipos de entrada.Tlbimp.exe always applies the MarshalAsAttribute to String and Object types for clarity, regardless of the type specified in the input type library.

Nota

El MarshalAsAttribute no admite la serialización de tipos genéricos.The MarshalAsAttribute does not support marshaling of generic types.

Constructores

MarshalAsAttribute(Int16) MarshalAsAttribute(Int16) MarshalAsAttribute(Int16) MarshalAsAttribute(Int16)

Inicializa una nueva instancia de la clase MarshalAsAttribute con el valor UnmanagedType especificado.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value.

MarshalAsAttribute(UnmanagedType) MarshalAsAttribute(UnmanagedType) MarshalAsAttribute(UnmanagedType) MarshalAsAttribute(UnmanagedType)

Inicializa una nueva instancia de la clase MarshalAsAttribute con el miembro de enumeración UnmanagedType especificado.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType enumeration member.

Campos

ArraySubType ArraySubType ArraySubType ArraySubType

Especifica el tipo de elemento del campo LPArray o del campo ByValArray no administrado.Specifies the element type of the unmanaged LPArray or ByValArray.

IidParameterIndex IidParameterIndex IidParameterIndex IidParameterIndex

Especifica el índice de parámetro del atributo no administrado iid_is utilizado por COM.Specifies the parameter index of the unmanaged iid_is attribute used by COM.

MarshalCookie MarshalCookie MarshalCookie MarshalCookie

Proporciona información adicional a un contador de referencias personalizado.Provides additional information to a custom marshaler.

MarshalType MarshalType MarshalType MarshalType

Especifica el nombre completo de un contador de referencias personalizado.Specifies the fully qualified name of a custom marshaler.

MarshalTypeRef MarshalTypeRef MarshalTypeRef MarshalTypeRef

Implementa MarshalType como un tipo.Implements MarshalType as a type.

SafeArraySubType SafeArraySubType SafeArraySubType SafeArraySubType

Indica el tipo de elemento de SafeArray.Indicates the element type of the SafeArray.

SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType

Indica el tipo de elemento definido por el usuario de SafeArray.Indicates the user-defined element type of the SafeArray.

SizeConst SizeConst SizeConst SizeConst

Indica el número de elementos de la matriz de longitud fija o el número de caracteres (no bytes) de una cadena que se van a importar.Indicates the number of elements in the fixed-length array or the number of characters (not bytes) in a string to import.

SizeParamIndex SizeParamIndex SizeParamIndex SizeParamIndex

Indica el parámetro de base cero que contiene el recuento de elementos de matriz, similar a size_is en COM.Indicates the zero-based parameter that contains the count of array elements, similar to size_is in COM.

Propiedades

TypeId TypeId TypeId TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)
Value Value Value Value

Obtiene el valor de UnmanagedType a partir del cual se van a calcular las referencias de los datos.Gets the UnmanagedType value the data is to be marshaled as.

Métodos

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Devuelve el código hash de esta instancia.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Implementaciones de interfaz explícitas

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Se aplica a

Consulte también: