MarshalAsAttribute Klas

Definitie

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
MarshalAsAttribute
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 iid_is kenmerk gebruikt door COM.

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 size_is in COM.

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)

Van toepassing op

Zie ook