MarshalAsAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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 |
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 |
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) |