MarshalAsAttribute Classe

Définition

Indique comment marshaler les données entre le code managé et 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 un MarshalAsAttribute 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 aux paramètres, aux champs ou aux valeurs de retour.

Cet attribut est facultatif, car chaque type de données a un comportement de marshaling par défaut. Cet attribut est nécessaire uniquement 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 , d’un LPStr, d’un LPWStrLPTStrou d’un BStr. Par défaut, le Common Language Runtime marshale un paramètre de chaîne en tant que BStr 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 une LPStr au lieu d’un BStr. Le Tlbexp.exe (Exporteur 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 les champs d’un type valeur) en tant que LPStr méthode ou fonction d’appel de plateforme. Pour plus d’informations, consultez Comportement de marshaling 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 d’énumération nécessitent des informations supplémentaires. Par exemple, des informations supplémentaires sont nécessaires lorsque l’objet UnmanagedType est LPArray. Pour obtenir une description complète de l’utilisation de cet attribut avec des tableaux, consultez Marshaling par défaut pour les tableaux.

L 'Tlbimp.exe (Importateur de bibliothèque de types) applique également cet attribut aux paramètres, champs et 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 types et Object les MarshalAsAttribute types String pour plus de clarté, quel que soit le type spécifié dans la bibliothèque de types d’entrée.

Note

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

Constructeurs

Nom Description
MarshalAsAttribute(Int16)

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

MarshalAsAttribute(UnmanagedType)

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

Champs

Nom Description
ArraySubType

Spécifie le type d’élément de l’élément non managé LPArray ou ByValArray.

IidParameterIndex

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

MarshalCookie

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

MarshalType

Spécifie le nom complet d’un marshaleur personnalisé.

MarshalTypeRef

Implémente MarshalType en tant que type.

SafeArraySubType

Indique le type d’élément du SafeArray.

SafeArrayUserDefinedSubType

Indique le type d’élément défini par l’utilisateur du SafeArray.

SizeConst

Indique le nombre d’éléments dans le tableau de longueur fixe ou le nombre de caractères (et 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, comme size_is dans COM.

Propriétés

Nom Description
TypeId

En cas d’implémentation dans une classe dérivée, obtient un identificateur unique pour cette Attribute.

(Hérité de Attribute)
Value

Obtient la UnmanagedType valeur que les données doivent être marshalées comme.

Méthodes

Nom Description
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 pour cette instance.

(Hérité de Attribute)
GetType()

Obtient la 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 de la classe dérivée.

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

En cas de substitution dans une classe dérivée, retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

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

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
_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 d’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 méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à

Voir aussi