Partager via


MarshalAsAttribute Classe

Définition

Indique comment marshaler les données entre du code managé et du code non managé.

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
Héritage
MarshalAsAttribute
Attributs

Exemples

L’exemple suivant applique à MarshalAsAttribute un champ, un paramètre de méthode et une valeur de retour de méthode dans un type managé.

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’exemple suivant applique l’attribut MarshalAsAttribute à une propriété :

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

Remarques

Vous pouvez appliquer cet attribut à des paramètres, des champs ou des valeurs de retour.

Cet attribut est facultatif, car chaque type de données a un comportement de marshaling par défaut. Cet attribut n’est nécessaire que lorsqu’un type donné peut être marshalé sur plusieurs types. Par exemple, vous pouvez marshaler une chaîne en code non managé sous la forme d’un LPStr, d’un LPWStr, d’un LPTStrou d’un BStr. Par défaut, le Common Language Runtime marshale un paramètre de chaîne en tant que BStr sur les méthodes COM. Vous pouvez appliquer l’attribut MarshalAsAttribute à un champ ou à un paramètre individuel pour que cette chaîne particulière soit marshalée comme un LPStr au lieu d’un BStr. Le Tlbexp.exe (exportateur de bibliothèque de types) transmet vos préférences de marshaling au Common Language Runtime.

Certains paramètres et valeurs de retour ont un comportement de marshaling par défaut différent lorsqu’ils sont utilisés avec l’interopérabilité COM ou l’appel de plateforme. Par défaut, le runtime marshale un paramètre de chaîne (et des champs dans un type valeur) en tant que méthode ou fonction d’appel de LPStr plateforme. Pour plus d’informations, consultez Comportement de marshalage par défaut.

Dans la plupart des cas, l’attribut identifie simplement le format des données non managées à l’aide de l’énumération UnmanagedType , comme indiqué dans la signature C# suivante :

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

Certains UnmanagedType membres de l’énumération nécessitent des informations supplémentaires. Par exemple, des informations supplémentaires sont nécessaires lorsque est UnmanagedTypeLPArray. Pour obtenir une description complète de l’utilisation de cet attribut avec des tableaux, consultez Marshaling par défaut pour les tableaux.

Le Tlbimp.exe (importateur de bibliothèque de types) applique également cet attribut aux paramètres, aux champs et aux valeurs de retour pour indiquer que le type de données dans la bibliothèque de types d’entrée n’est pas le type par défaut pour le type de données managé correspondant. Tlbimp.exe applique toujours les MarshalAsAttribute types à et Object pour String plus de clarté, quel que soit le type spécifié dans la bibliothèque de types d’entrée.

Notes

ne prend pas en charge le MarshalAsAttribute marshaling des types génériques.

Constructeurs

MarshalAsAttribute(Int16)

Initialise une nouvelle instance de la classe MarshalAsAttribute avec la valeur UnmanagedType spécifiée.

MarshalAsAttribute(UnmanagedType)

Initialise une nouvelle instance de la classe MarshalAsAttribute avec le membre de l'énumération UnmanagedType spécifié.

Champs

ArraySubType

Spécifie le type d'élément des champs LPArray ou ByValArray managés.

IidParameterIndex

Spécifie l'index de paramètre de l'attribut iid_is non managé utilisé par COM.

MarshalCookie

Fournit des informations supplémentaires à un marshaleur personnalisé.

MarshalType

Spécifie le nom qualifié complet d'un marshaleur personnalisé.

MarshalTypeRef

Implémente MarshalType en tant que type.

SafeArraySubType

Indique le type d'élément de SafeArray.

SafeArrayUserDefinedSubType

Indique le type d'élément défini par l'utilisateur de SafeArray.

SizeConst

Indique le nombre d'éléments dans le tableau de longueur fixe ou le nombre de caractères (non d'octets) dans une chaîne à importer.

SizeParamIndex

Indique le paramètre de base zéro qui contient le nombre d'éléments de tableau, semblable à size_is dans COM.

Propriétés

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)
Value

Obtient la valeur UnmanagedType sous laquelle les données doivent être marshalées.

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

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

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à

Voir aussi