Clase MarshalAsAttribute
Publicado: octubre de 2016
Indica cómo calcular las referencias de los datos entre el código administrado y el código no administrado.
Espacio de nombres: System.Runtime.InteropServices
Ensamblado: mscorlib (en mscorlib.dll)
Jerarquía de herencia
System.Object
System.Attribute
System.Runtime.InteropServices.MarshalAsAttribute
Sintaxis
[AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue,
Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class MarshalAsAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Field | AttributeTargets::Parameter | AttributeTargets::ReturnValue,
Inherited = false)]
[ComVisibleAttribute(true)]
public ref class MarshalAsAttribute sealed : Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue,
Inherited = false)>]
[<ComVisibleAttribute(true)>]
type MarshalAsAttribute =
class
inherit Attribute
end
<AttributeUsageAttribute(AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue,
Inherited := False)>
<ComVisibleAttribute(True)>
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
Constructores
Nombre | Descripción | |
---|---|---|
MarshalAsAttribute(Int16) | Inicializa una nueva instancia de la clase MarshalAsAttribute con el valor UnmanagedType especificado. |
|
MarshalAsAttribute(UnmanagedType) | Inicializa una nueva instancia de la MarshalAsAttribute clase con los valores especificados UnmanagedType miembro de enumeración. |
Propiedades
Nombre | Descripción | |
---|---|---|
TypeId | Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.(Heredado de Attribute). |
|
Value | Obtiene el UnmanagedType valor los datos se van a calcular como. |
Métodos
Nombre | Descripción | |
---|---|---|
Equals(Object) | Esta API admite la infraestructura producto y no está diseñada para usarse directamente desde el código. 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). |
|
ToString() | Devuelve una cadena que representa el objeto actual.(Heredado de Object). |
Campos
Nombre | Descripción | |
---|---|---|
ArraySubType | Especifica el tipo de elemento de la no administrada UnmanagedType.LPArray o UnmanagedType.ByValArray. |
|
IidParameterIndex | Especifica el índice de parámetro de la no administrada iid_is atributo 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 MarshalAsAttribute.MarshalType como un tipo. |
|
SafeArraySubType | Indica el tipo de elemento de la UnmanagedType.SafeArray. |
|
SafeArrayUserDefinedSubType | Indica el tipo de elemento definido por el usuario de la UnmanagedType.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 para importar. |
|
SizeParamIndex | Indica el parámetro de base cero que contiene el número de elementos de matriz, similar a size_is en COM. |
Implementaciones de interfaz explícitas
Nombre | Descripción | |
---|---|---|
_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). |
Comentarios
You can apply this attribute to parameters, fields, or return values.
This attribute is optional, as each data type has a default marshaling behavior. This attribute is only necessary when a given type can be marshaled to multiple types. For example, you can marshal a string to unmanaged code as either a F:System.Runtime.InteropServices.UnmanagedType.LPStr, a F:System.Runtime.InteropServices.UnmanagedType.LPWStr, a F:System.Runtime.InteropServices.UnmanagedType.LPTStr, or a F:System.Runtime.InteropServices.UnmanagedType.BStr. By default, the common language runtime marshals a string parameter as a F:System.Runtime.InteropServices.UnmanagedType.BStr to COM methods. You can apply the T:System.Runtime.InteropServices.MarshalAsAttribute attribute to an individual field or parameter to cause that particular string to be marshaled as a F:System.Runtime.InteropServices.UnmanagedType.LPStr instead of a F:System.Runtime.InteropServices.UnmanagedType.BStr. The [<topic://cpgrfTypeLibraryExporterTlbexpexe>] passes your marshaling preferences to the common language runtime.
Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. By default, the runtime marshals a string parameter (and fields in a value type) as a F:System.Runtime.InteropServices.UnmanagedType.LPStr to a platform invoke method or function. For additional information, see [<topic://cpcondefaultmarshalingbehavior>].
In most cases, the attribute simply identifies the format of the unmanaged data using the T:System.Runtime.InteropServices.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)
Some T:System.Runtime.InteropServices.UnmanagedType enumeration members require additional information. For example, additional information is needed when the T:System.Runtime.InteropServices.UnmanagedType is F:System.Runtime.InteropServices.UnmanagedType.LPArray. For a complete description of how to use this attribute with arrays, see [<topic://cpcondefaultmarshalingforarrays>].
The [<topic://cpgrfTypeLibraryImporterTlbimpexe>] 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 always applies the T:System.Runtime.InteropServices.MarshalAsAttribute to T:System.String and T:System.Object types for clarity, regardless of the type specified in the input type library.
Nota
The T:System.Runtime.InteropServices.MarshalAsAttribute does not support marshaling of generic types.
Ejemplos
The following example applies the T:System.Runtime.InteropServices.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 a return value.
Public Function M2() As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
Return "Hello World"
End Function
End Module
The following example applies the T:System.Runtime.InteropServices.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
Información de versión
Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Seguridad para subprocesos
Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.
Ver también
UnmanagedType
Espacio de nombres System.Runtime.InteropServices
Tlbexp.exe (Type Library Exporter)
Tlbimp.exe (Type Library Importer)
Volver al principio