MarshalAsAttribute MarshalAsAttribute MarshalAsAttribute MarshalAsAttribute Class

Definizione

Indica come eseguire il marshalling dei dati tra codice gestito e non gestito.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
Ereditarietà
MarshalAsAttributeMarshalAsAttributeMarshalAsAttributeMarshalAsAttribute
Attributi

Esempi

Nell'esempio seguente viene applicato MarshalAsAttribute a un campo, un parametro del metodo e un valore restituito del metodo in un tipo gestito.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

Nell'esempio seguente l' MarshalAsAttribute attributo viene applicato a una proprietà: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

Commenti

È possibile applicare questo attributo a parametri, campi o valori restituiti.You can apply this attribute to parameters, fields, or return values.

Questo attributo è facoltativo, poiché per ogni tipo di dati è presente un comportamento di marshalling predefinito.This attribute is optional, as each data type has a default marshaling behavior. Questo attributo è necessario solo quando è possibile effettuare il marshalling di un tipo specifico a più tipi.This attribute is only necessary when a given type can be marshaled to multiple types. Ad esempio, è possibile effettuare il marshalling di una stringa nel codice non gestito LPStrcome LPWStr,, LPTStr, o BStr.For example, you can marshal a string to unmanaged code as either a LPStr, a LPWStr, a LPTStr, or a BStr. Per impostazione predefinita, il Common Language Runtime esegue il marshalling di un BStr parametro di stringa come ai metodi com.By default, the common language runtime marshals a string parameter as a BStr to COM methods. È possibile applicare l' MarshalAsAttribute attributo a un singolo campo o parametro per fare in modo che tale stringa venga sottoposta LPStr a marshalling BStrcome anziché come.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. Tlbexp. exe (utilità di esportazione della libreria dei tipi) passa le preferenze di marshalling al Common Language Runtime.The Tlbexp.exe (Type Library Exporter) passes your marshaling preferences to the common language runtime.

Alcuni parametri e valori restituiti hanno un comportamento di marshalling predefinito diverso quando viene usato con l'interoperabilità COM o con platform invoke.Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. Per impostazione predefinita, il runtime esegue il marshalling di un parametro di stringa (e dei campi in LPStr un tipo di valore) come a un Platform Invoke metodo o funzione.By default, the runtime marshals a string parameter (and fields in a value type) as a LPStr to a platform invoke method or function. Per ulteriori informazioni, vedere comportamento di marshalling predefinito.For additional information, see Default Marshaling Behavior.

Nella maggior parte dei casi, l'attributo identifica semplicemente il formato dei dati non gestiti usando l' UnmanagedType enumerazione, come illustrato nella firma seguente 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)

Alcuni UnmanagedType membri dell'enumerazione richiedono informazioni aggiuntive.Some UnmanagedType enumeration members require additional information. Ad esempio, sono necessarie informazioni aggiuntive quando UnmanagedType è. LPArrayFor example, additional information is needed when the UnmanagedType is LPArray. Per una descrizione completa di come usare questo attributo con le matrici, vedere marshalling predefinito per le matrici.For a complete description of how to use this attribute with arrays, see Default Marshaling for Arrays.

Tlbimp. exe (utilità di importazione della libreria dei tipi) applica anche questo attributo a parametri, campi e valori restituiti per indicare che il tipo di dati nella libreria dei tipi di input non è il tipo predefinito per il tipo di dati gestito corrispondente.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 applica MarshalAsAttribute String sempre ai tipi e Object per maggiore chiarezza, indipendentemente dal tipo specificato nella libreria dei tipi di input.Tlbimp.exe always applies the MarshalAsAttribute to String and Object types for clarity, regardless of the type specified in the input type library.

Nota

Non MarshalAsAttribute supporta il marshalling di tipi generici.The MarshalAsAttribute does not support marshaling of generic types.

Costruttori

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

Inizializza una nuova istanza della classe MarshalAsAttribute con il valore UnmanagedType specificato.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value.

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

Inizializza una nuova istanza della classe MarshalAsAttribute con il membro di enumerazione UnmanagedType specificato.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType enumeration member.

Campi

ArraySubType ArraySubType ArraySubType ArraySubType

Specifica il tipo di elemento dell'oggetto LPArray o ByValArray non gestito.Specifies the element type of the unmanaged LPArray or ByValArray.

IidParameterIndex IidParameterIndex IidParameterIndex IidParameterIndex

Specifica l'indice di parametro dell'attributo iid_is non gestito utilizzato da COM.Specifies the parameter index of the unmanaged iid_is attribute used by COM.

MarshalCookie MarshalCookie MarshalCookie MarshalCookie

Fornisce informazioni aggiuntive a un gestore di marshalling personalizzato.Provides additional information to a custom marshaler.

MarshalType MarshalType MarshalType MarshalType

Specifica il nome completo di un gestore di marshalling personalizzato.Specifies the fully qualified name of a custom marshaler.

MarshalTypeRef MarshalTypeRef MarshalTypeRef MarshalTypeRef

Implementa MarshalType come tipo.Implements MarshalType as a type.

SafeArraySubType SafeArraySubType SafeArraySubType SafeArraySubType

Indica il tipo di elemento di SafeArray .Indicates the element type of the SafeArray.

SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType

Indica il tipo di elemento di SafeArray definito dall'utente.Indicates the user-defined element type of the SafeArray.

SizeConst SizeConst SizeConst SizeConst

Indica il numero di elementi nella matrice a lunghezza fissa o il numero di caratteri (non byte) in una stringa da importare.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 il parametro in base zero che contiene il numero di elementi della matrice, come size_is in COM.Indicates the zero-based parameter that contains the count of array elements, similar to size_is in COM.

Proprietà

TypeId TypeId TypeId TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)
Value Value Value Value

Ottiene il valore UnmanagedType in base al quale viene eseguito il marshalling dei dati.Gets the UnmanagedType value the data is to be marshaled as.

Metodi

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

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.Returns a value that indicates whether this instance is equal to a specified object.

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

Restituisce il codice hash per l'istanza.Returns the hash code for this instance.

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

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

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

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.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)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.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 superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

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

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Inherited from Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.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)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.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 il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 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)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Si applica a

Vedi anche