Exporter (0) Imprimer
Développer tout

MarshalAsAttribute, classe

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

Espace de noms : System.Runtime.InteropServices
Assembly : mscorlib (dans mscorlib.dll)

[AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false)] 
[ComVisibleAttribute(true)] 
public sealed class MarshalAsAttribute : Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false) */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class MarshalAsAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false) 
ComVisibleAttribute(true) 
public final class MarshalAsAttribute extends Attribute

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 adopte un comportement par défaut durant le marshaling. Il est uniquement nécessaire lorsqu'un type donné peut être marshalé en plusieurs types. Vous pouvez, par exemple, marshaler une chaîne vers du code non managé en tant que LPStr, LPWStr, LPTStr ou BStr. Par défaut, le Common Language Runtime marshale un paramètre de chaîne en tant que BStr vers des méthodes COM. Vous pouvez appliquer l'attribut MarshalAsAttribute à un champ ou à un paramètre individuel pour que cette chaîne spécifique soit marshalée en tant que LPStr au lieu de BStr. L'outil Type Library Exporter (Tlbexp.exe) passe vos préférences de marshaling au Common Language Runtime.

Quelques paramètres et valeurs de retour ont un comportement de marshaling par défaut différent lorsqu'ils sont utilisés avec l'appel de plate-forme ou COM Interop. Par défaut, le runtime marshale un paramètre de chaîne (et les champs dans un type valeur) en tant que LPStr vers une fonction ou une méthode d'appel de plate-forme. 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 l'illustre la signature C# suivante :

void
    MyMethod([MarshalAs(LPStr)] String s);

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

L'outil Type Library Importer (Tlbimp.exe) applique également cet attribut à des paramètres, des champs et des valeurs de retour pour indiquer que le type de données dans la bibliothèque de types d'entrée ne constitue pas le type par défaut pour le type de données managées correspondant. Tlbimp.exe applique toujours l'attribut MarshalAsAttribute aux types String et Object par souci de clarté, quel que soit le type spécifié dans la bibliothèque de types d'entrée.

RemarqueRemarque

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

Les exemples suivants indiquent la position de MarshalAsAttribute dans du code source managé lorsqu'il est appliqué à des paramètres, des champs et des valeurs de retour.

Imports System.Runtime.InteropServices

Module Program
    'Applied to a parameter.
    Public Sub M1(<MarshalAs(UnmanagedType.LPWStr)> ByVal msg As String)
    End Sub

    'Applied to a field within a class.
    Class MsgText
        <MarshalAs(UnmanagedType.LPWStr)> Public msg As String
    End Class

    'Applied to a a return value.
    Public Function M2() As <MarshalAs(UnmanagedType.LPWStr)> String
    End Function
End Module

//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;
}

//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage();

System.Object
   System.Attribute
    System.Runtime.InteropServices.MarshalAsAttribute

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft