MarshalAsAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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 |
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 |
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) |