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 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
- 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é |
| 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 |
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) |