MarshalAsAttribute Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- 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 |
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 à |
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) |