Freigeben über


MarshalAsAttribute Klasse

Definition

Gibt an, wie die Daten zwischen verwaltetem und nicht verwaltetem Code gemarshallt werden sollen.

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
Vererbung
MarshalAsAttribute
Attribute

Beispiele

Im folgenden Beispiel wird der MarshalAsAttribute auf ein Feld, einen Methodenparameter und einen Methodenrückgabewert in einem verwalteten Typ angewendet.

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

Im folgenden Beispiel wird das MarshalAsAttribute Attribut auf eine Eigenschaft angewendet:

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

Hinweise

Sie können dieses Attribut auf Parameter, Felder oder Rückgabewerte anwenden.

Dieses Attribut ist optional, da jeder Datentyp ein Standardmäßiges Marshallverhalten aufweist. Dieses Attribut ist nur erforderlich, wenn ein bestimmter Typ in mehrere Typen gemarst werden kann. Beispielsweise können Sie eine Zeichenfolge in nicht verwalteten Code als ein , ein LPStr, ein LPWStrLPTStroder ein marshallenBStr. Standardmäßig marshallt die Common Language Runtime einen Zeichenfolgenparameter als COM-Methoden BStr . Sie können das MarshalAsAttribute -Attribut auf ein einzelnes Feld oder Einen einzelnen Parameter anwenden, um zu bewirken, dass diese bestimmte Zeichenfolge als gemarst LPStr wird.BStr Der Tlbexp.exe (Type Library Exporter) übergibt Ihre Marshalleinstellungen an die Common Language Runtime.

Einige Parameter und Rückgabewerte weisen ein anderes Standard-Marshallverhalten auf, wenn sie mit COM-Interop oder Plattformaufrufen verwendet werden. Standardmäßig marshallt die Runtime einen Zeichenfolgenparameter (und Felder in einem Werttyp) als eine LPStr Plattformaufrufmethode oder -funktion. Weitere Informationen finden Sie unter Standard-Marshallverhalten.

In den meisten Fällen identifiziert das Attribut einfach das Format der nicht verwalteten Daten mithilfe der UnmanagedType Enumeration, wie in der folgenden C#-Signatur gezeigt:

public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)

Einige UnmanagedType Enumerationsmember erfordern zusätzliche Informationen. Beispielsweise sind zusätzliche Informationen erforderlich, wenn der UnmanagedType ist LPArray. Eine vollständige Beschreibung der Verwendung dieses Attributs mit Arrays finden Sie unter Standardmarschalling für Arrays.

Das Tlbimp.exe (Type Library Importer) wendet dieses Attribut auch auf Parameter, Felder und Rückgabewerte an, um anzugeben, dass der Datentyp in der Eingabetypbibliothek nicht der Standardtyp für den entsprechenden verwalteten Datentyp ist. Tlbimp.exe immer die MarshalAsAttribute Typen auf und Object anwenden, um String die Klarheit zu erzielen, unabhängig vom in der Eingabetypbibliothek angegebenen Typ.

Hinweis

Die MarshalAsAttribute unterstützt das Marshallen generischer Typen nicht.

Konstruktoren

MarshalAsAttribute(Int16)

Initialisiert eine neue Instanz der MarshalAsAttribute-Klasse mit dem angegebenen UnmanagedType-Wert.

MarshalAsAttribute(UnmanagedType)

Initialisiert eine neue Instanz der MarshalAsAttribute-Klasse mit dem angegebenen UnmanagedType-Enumerationsmember.

Felder

ArraySubType

Gibt den Elementtyp des nicht verwalteten LPArray oder ByValArray an.

IidParameterIndex

Gibt den Parameterindex des nicht verwalteten iid_is-Attributs an, das von COM verwendet wird.

MarshalCookie

Stellt zusätzliche Informationen für einen benutzerdefinierten Marshaller zur Verfügung.

MarshalType

Gibt den voll gekennzeichneten Namen eines benutzerdefinierten Marshallers an.

MarshalTypeRef

Implementiert MarshalType als Typ.

SafeArraySubType

Gibt den Elementtyp von SafeArray an.

SafeArrayUserDefinedSubType

Gibt den benutzerdefinierten Elementtyp von SafeArray an.

SizeConst

Gibt die Anzahl der Elemente im Array fester Länger oder die Anzahl der Zeichen (nicht der Bytes) in einer zu importierenden Zeichenfolge an.

SizeParamIndex

Gibt den nullbasierten Parameter an, der die Anzahl von Arrayelementen enthält, vergleichbar mit size_is in COM.

Eigenschaften

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)
Value

Ruft den UnmanagedType-Wert ab, als der die Daten gemarshallt werden sollen.

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.

(Geerbt von Attribute)

Gilt für:

Weitere Informationen