MarshalAsAttribute Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt aangegeven hoe u de gegevens tussen beheerde en onbeheerde code kunt marshalen.
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
- Overname
- Kenmerken
Voorbeelden
In het volgende voorbeeld wordt het MarshalAsAttribute toegepast op een veld, een methodeparameter en een methode retourwaarde in een beheerd type.
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
In het volgende voorbeeld wordt het MarshalAsAttribute kenmerk toegepast op een eigenschap:
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
Opmerkingen
U kunt dit kenmerk toepassen op parameters, velden of retourwaarden.
Dit kenmerk is optioneel, omdat elk gegevenstype een standaard marshaling-gedrag heeft. Dit kenmerk is alleen nodig wanneer een bepaald type kan worden marshaled aan meerdere typen. U kunt bijvoorbeeld een tekenreeks naar onbeheerde code heffen als een LPStr, a LPWStr, a LPTStrof een BStr. De algemene taalruntime marshals standaard een tekenreeksparameter als com-methoden BStr . U kunt het MarshalAsAttribute kenmerk toepassen op een afzonderlijk veld of een afzonderlijke parameter om ervoor te zorgen dat die bepaalde tekenreeks wordt marshaled als een LPStr in plaats van een BStr. De Tlbexp.exe (Type Library Exporter) geeft uw marshaling-voorkeuren door aan de algemene taalruntime.
Sommige parameters en retourwaarden hebben een ander standaard marshalinggedrag wanneer deze worden gebruikt met COM-interop- of platformaanroepen. De runtime marshals standaard een tekenreeksparameter (en velden in een waardetype) als een LPStr platform-aanroepmethode of -functie. Zie Default Marshaling Behavior voor meer informatie.
In de meeste gevallen identificeert het kenmerk eenvoudig de indeling van de niet-beheerde gegevens met behulp van de UnmanagedType opsomming, zoals wordt weergegeven in de volgende C#-handtekening:
public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)
Voor sommige UnmanagedType inventarisatieleden is aanvullende informatie vereist. Er is bijvoorbeeld aanvullende informatie nodig wanneer dit UnmanagedType het is LPArray. Zie Default Marshaling for Arrays voor een volledige beschrijving van het gebruik van dit kenmerk met matrices.
Het Tlbimp.exe (Type Bibliotheekimporteur) past dit kenmerk ook toe op parameters, velden en retourwaarden om aan te geven dat het gegevenstype in de invoertypebibliotheek niet het standaardtype is voor het bijbehorende beheerde gegevenstype. Tlbimp.exe altijd van MarshalAsAttributeString toepassing op en Object typen voor duidelijkheid, ongeacht het type dat is opgegeven in de invoertypebibliotheek.
Note
Het MarshalAsAttribute biedt geen ondersteuning voor marshaling van algemene typen.
Constructors
| Name | Description |
|---|---|
| MarshalAsAttribute(Int16) |
Initialiseert een nieuw exemplaar van de MarshalAsAttribute klasse met de opgegeven UnmanagedType waarde. |
| MarshalAsAttribute(UnmanagedType) |
Initialiseert een nieuw exemplaar van de MarshalAsAttribute klasse met het opgegeven UnmanagedType opsommingslid. |
Velden
| Name | Description |
|---|---|
| ArraySubType |
Hiermee geeft u het elementtype van de onbeheerde LPArray of ByValArray. |
| IidParameterIndex |
Hiermee geeft u de parameterindex van het onbeheerde |
| MarshalCookie |
Biedt aanvullende informatie aan een aangepaste marshaler. |
| MarshalType |
Hiermee geeft u de volledig gekwalificeerde naam van een aangepaste marshaler. |
| MarshalTypeRef |
MarshalType Wordt geïmplementeerd als een type. |
| SafeArraySubType |
Geeft het elementtype van de SafeArray. |
| SafeArrayUserDefinedSubType |
Geeft het door de gebruiker gedefinieerde elementtype van de SafeArray. |
| SizeConst |
Geeft het aantal elementen in de matrix met vaste lengte of het aantal tekens (geen bytes) in een tekenreeks aan die moet worden geïmporteerd. |
| SizeParamIndex |
Geeft de op nul gebaseerde parameter aan die het aantal matrixelementen bevat, vergelijkbaar met |
Eigenschappen
| Name | Description |
|---|---|
| TypeId |
Wanneer deze wordt geïmplementeerd in een afgeleide klasse, krijgt u Attributehiervoor een unieke id. (Overgenomen van Attribute) |
| Value |
Hiermee haalt u de UnmanagedType waarde op die de gegevens moeten worden marshaled als. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Retourneert een waarde die aangeeft of dit exemplaar gelijk is aan een opgegeven object. (Overgenomen van Attribute) |
| GetHashCode() |
Retourneert de hash-code voor dit exemplaar. (Overgenomen van Attribute) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| IsDefaultAttribute() |
Wanneer deze wordt overschreven in een afgeleide klasse, geeft u aan of de waarde van dit exemplaar de standaardwaarde is voor de afgeleide klasse. (Overgenomen van Attribute) |
| Match(Object) |
Wanneer deze wordt overschreven in een afgeleide klasse, wordt een waarde geretourneerd die aangeeft of dit exemplaar gelijk is aan een opgegeven object. (Overgenomen van Attribute) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
Expliciete interface-implementaties
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Hiermee wordt een set namen toegewezen aan een bijbehorende set verzend-id's. (Overgenomen van Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Hiermee haalt u de typegegevens voor een object op, die kan worden gebruikt om de typegegevens voor een interface op te halen. (Overgenomen van Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Hiermee wordt het aantal type-informatieinterfaces opgehaald dat een object biedt (0 of 1). (Overgenomen van Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Biedt toegang tot eigenschappen en methoden die door een object worden weergegeven. (Overgenomen van Attribute) |