Compartir vía


MarshalAsAttribute Clase

Definición

Indica cómo calcular las referencias de los datos entre el código administrado y el código no administrado.

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

Ejemplos

En el ejemplo siguiente se aplica a MarshalAsAttribute un campo, un parámetro de método y un valor devuelto de método en un tipo administrado.

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

En el ejemplo siguiente se aplica el MarshalAsAttribute atributo a una propiedad :

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.

Este atributo es opcional, ya que cada tipo de datos tiene un comportamiento de serialización predeterminado. Este atributo solo es necesario cuando un tipo determinado se puede serializar en varios tipos. Por ejemplo, puede serializar una cadena en código no administrado como , LPStr, LPWStro LPTStr.BStr De forma predeterminada, Common Language Runtime serializa un parámetro de cadena como métodos BStr COM. Puede aplicar el MarshalAsAttribute atributo a un campo o parámetro individual para hacer que esa cadena determinada se serializa como en LPStr lugar de .BStr El Tlbexp.exe (exportador de la biblioteca de tipos) pasa las preferencias de serialización a Common Language Runtime.

Algunos parámetros y valores devueltos tienen un comportamiento de serialización predeterminado diferente cuando se usa con interoperabilidad COM o invocación de plataforma. De forma predeterminada, el tiempo de ejecución serializa un parámetro de cadena (y campos de un tipo de valor) como para LPStr un método o función de invocación de plataforma. Para obtener más información, consulte Comportamiento de serialización predeterminada.

En la mayoría de los casos, el atributo simplemente identifica el formato de los datos no administrados mediante la UnmanagedType enumeración , como se muestra en la siguiente firma de C#:

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

Algunos UnmanagedType miembros de enumeración requieren información adicional. Por ejemplo, se necesita información adicional cuando UnmanagedType es LPArray. Para obtener una descripción completa de cómo usar este atributo con matrices, consulte Serialización predeterminada para matrices.

El Tlbimp.exe (Importador de bibliotecas de tipos) también aplica este atributo a parámetros, campos y valores devueltos para indicar que el tipo de datos de la biblioteca de tipos de entrada no es el tipo predeterminado para el tipo de datos administrado correspondiente. Tlbimp.exe siempre aplica a los MarshalAsAttribute tipos y StringObject para mayor claridad, independientemente del tipo especificado en la biblioteca de tipos de entrada.

Nota

MarshalAsAttribute no admite la serialización de tipos genéricos.

Constructores

MarshalAsAttribute(Int16)

Inicializa una nueva instancia de la clase MarshalAsAttribute con el valor UnmanagedType especificado.

MarshalAsAttribute(UnmanagedType)

Inicializa una nueva instancia de la clase MarshalAsAttribute con el miembro de enumeración UnmanagedType especificado.

Campos

ArraySubType

Especifica el tipo de elemento del campo LPArray o del campo ByValArray no administrado.

IidParameterIndex

Especifica el índice de parámetro del atributo no administrado iid_is utilizado por COM.

MarshalCookie

Proporciona información adicional a un contador de referencias personalizado.

MarshalType

Especifica el nombre completo de un contador de referencias personalizado.

MarshalTypeRef

Implementa MarshalType como un tipo.

SafeArraySubType

Indica el tipo de elemento de SafeArray.

SafeArrayUserDefinedSubType

Indica el tipo de elemento definido por el usuario de SafeArray.

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.

SizeParamIndex

Indica el parámetro de base cero que contiene el recuento de elementos de matriz, similar a size_is en COM.

Propiedades

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)
Value

Obtiene el valor de UnmanagedType a partir del cual se van a calcular las referencias de los datos.

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

(Heredado de Attribute)
_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.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

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

(Heredado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.

(Heredado de Attribute)

Se aplica a

Consulte también