Compartir a través de


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
System_CAPS_pubmethod MarshalAsAttribute(Int16)

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

System_CAPS_pubmethod MarshalAsAttribute(UnmanagedType)

Inicializa una nueva instancia de la MarshalAsAttribute clase con los valores especificados UnmanagedType miembro de enumeración.

Propiedades

Nombre Descripción
System_CAPS_pubproperty TypeId

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

System_CAPS_pubproperty Value

Obtiene el UnmanagedType valor los datos se van a calcular como.

Métodos

Nombre Descripción
System_CAPS_pubmethod 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).

System_CAPS_pubmethod GetHashCode()

Devuelve el código hash de esta instancia.(Heredado de Attribute).

System_CAPS_pubmethod GetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethod 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).

System_CAPS_pubmethod 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).

System_CAPS_pubmethod ToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

Campos

Nombre Descripción
System_CAPS_pubfield ArraySubType

Especifica el tipo de elemento de la no administrada UnmanagedType.LPArray o UnmanagedType.ByValArray.

System_CAPS_pubfield IidParameterIndex

Especifica el índice de parámetro de la no administrada iid_is atributo utilizado por COM.

System_CAPS_pubfield MarshalCookie

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

System_CAPS_pubfield MarshalType

Especifica el nombre completo de un contador de referencias personalizado.

System_CAPS_pubfield MarshalTypeRef

Implementa MarshalAsAttribute.MarshalType como un tipo.

System_CAPS_pubfield SafeArraySubType

Indica el tipo de elemento de la UnmanagedType.SafeArray.

System_CAPS_pubfield SafeArrayUserDefinedSubType

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

System_CAPS_pubfield 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.

System_CAPS_pubfield 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
System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod _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).

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetTypeInfoCount(UInt32)

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod _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