Auf Englisch lesen

Teilen über


MarshalAsAttribute Klasse

Definition

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

C#
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class MarshalAsAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class MarshalAsAttribute : 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.

C#
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)
    {  }
}

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

C#
decimal _money;   

public decimal Money 
{
   [return: MarshalAs(UnmanagedType.Currency)]
   get { return this._money; }
   [param: MarshalAs(UnmanagedType.Currency)]
   set { this._money = value; }
}

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:

C#
public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)

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:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Weitere Informationen