MarshalAsAttribute Classe

Definizione

Indica come eseguire il marshalling dei dati tra codice gestito e non gestito.

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
Ereditarietà
MarshalAsAttribute
Attributi

Esempio

L'esempio seguente applica l'oggetto MarshalAsAttribute a un campo, un parametro del metodo e un valore restituito dal metodo in un tipo gestito.

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

L'esempio seguente applica l'attributo MarshalAsAttribute a una proprietà:

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.

Questo attributo è facoltativo, poiché ogni tipo di dati ha un comportamento di marshalling predefinito. Questo attributo è necessario solo quando un determinato tipo può essere eseguito il marshalling su più tipi. Ad esempio, è possibile eseguire il marshalling di una stringa per il codice non gestito come LPStr, un LPWStr, o LPTStrun BStr. Per impostazione predefinita, Common Language Runtime esegue il marshalling di un parametro stringa come metodo BStr COM. È possibile applicare l'attributo MarshalAsAttribute a un singolo campo o parametro per causare il marshalling di tale stringa specifica come invece LPStr di un BStroggetto . L 'Tlbexp.exe (Type Library Exporter) passa le preferenze di marshalling al common language runtime.

Alcuni parametri e valori restituiti hanno un comportamento di marshalling predefinito diverso quando viene usato con l'interoperabilità COM o l'richiamare della piattaforma. Per impostazione predefinita, il runtime esegue il marshalling di un parametro stringa (e campi in un tipo di valore) come a un metodo o una LPStr funzione di richiamare la piattaforma. Per altre informazioni, vedere Comportamento di marshalling predefinito.

Nella maggior parte dei casi, l'attributo identifica semplicemente il formato dei dati non gestiti usando l'enumerazione UnmanagedType , come illustrato nella firma C# seguente:

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

Alcuni UnmanagedType membri di enumerazione richiedono informazioni aggiuntive. Ad esempio, sono necessarie informazioni aggiuntive quando è UnmanagedTypeLPArray. Per una descrizione completa di come usare questo attributo con matrici, vedere Marshalling predefinito per matrici.

La Tlbimp.exe (Importazione libreria tipi) applica anche questo attributo ai parametri, ai campi e ai 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. Tlbimp.exe applica sempre i MarshalAsAttribute tipi a String e Object per chiarezza, indipendentemente dal tipo specificato nella libreria dei tipi di input.

Nota

Non MarshalAsAttribute supporta il marshalling di tipi generici.

Costruttori

MarshalAsAttribute(Int16)

Inizializza una nuova istanza della classe MarshalAsAttribute con il valore UnmanagedType specificato.

MarshalAsAttribute(UnmanagedType)

Inizializza una nuova istanza della classe MarshalAsAttribute con il membro di enumerazione UnmanagedType specificato.

Campi

ArraySubType

Specifica il tipo di elemento dell'oggetto LPArray o ByValArray non gestito.

IidParameterIndex

Specifica l'indice di parametro dell'attributo iid_is non gestito utilizzato da COM.

MarshalCookie

Fornisce informazioni aggiuntive a un gestore di marshalling personalizzato.

MarshalType

Specifica il nome completo di un gestore di marshalling personalizzato.

MarshalTypeRef

Implementa MarshalType come tipo.

SafeArraySubType

Indica il tipo di elemento di SafeArray .

SafeArrayUserDefinedSubType

Indica il tipo di elemento di SafeArray definito dall'utente.

SizeConst

Indica il numero di elementi nella matrice a lunghezza fissa o il numero di caratteri (non byte) in una stringa da importare.

SizeParamIndex

Indica il parametro in base zero che contiene il numero di elementi della matrice, come size_is in COM.

Proprietà

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)
Value

Ottiene il valore UnmanagedType in base al quale viene eseguito il marshalling dei dati.

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_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.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a

Vedi anche