Freigeben über


MarshalAsAttribute-Klasse

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

Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<AttributeUsageAttribute(AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue, Inherited:=False)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class MarshalAsAttribute
    Inherits Attribute
'Usage
Dim instance As MarshalAsAttribute
[AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false)] 
[ComVisibleAttribute(true)] 
public sealed class MarshalAsAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Field|AttributeTargets::Parameter|AttributeTargets::ReturnValue, Inherited=false)] 
[ComVisibleAttribute(true)] 
public ref class MarshalAsAttribute sealed : public Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false) */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class MarshalAsAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false) 
ComVisibleAttribute(true) 
public final class MarshalAsAttribute extends Attribute

Hinweise

Dieses Attribut kann auf Parameter, Felder oder Rückgabewerte angewendet werden.

Dieses Attribut ist optional, da jeder Datentyp über ein Standardverhalten für das Marshallen verfügt. Dieses Attribut ist nur erforderlich, wenn ein angegebener Typ an mehrere Typen gemarshallt werden kann. Sie können eine Zeichenfolge z. B. als LPStr, LPWStr, LPTStr oder BStr an den nicht verwalteten Code marshallen. In der Standardeinstellung marshallt die Common Language Runtime einen Zeichenfolgenparameter für COM-Methoden als BStr. Das MarshalAsAttribute-Attribut kann auf ein einzelnes Feld bzw. einen einzelnen Parameter angewendet werden, damit diese bestimmte Zeichenfolge als LPStr anstatt als BStr gemarshallt wird. Type Library Exporter-Tool (Tlbexp.exe) übergibt die Marshallingeinstellungen an die Common Language Runtime.

Einige Parameter und Rückgabewerte weisen ein anderes Standardverhalten beim Marshalling auf, wenn sie mit COM-Interop oder Plattformaufrufen verwendet werden. In der Standardeinstellung marshallt die Laufzeit einen Zeichenfolgenparameter (und Felder in einem Werttyp) als LPStr an eine Plattformaufrufmethode oder -funktion. Weitere Informationen finden Sie unter Standardmäßiges Marshallingverhalten.

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

void
    MyMethod([MarshalAs(LPStr)] String s);

Für einige UnmanagedType-Enumerationsmember sind zusätzliche Informationen erforderlich. Zusätzliche Informationen sind beispielsweise erforderlich, wenn es sich bei UnmanagedType um LPArray handelt. Eine vollständige Beschreibung der Verwendung dieses Attributs mit Arrays finden Sie unter Standardmäßiges Marshalling für Arrays.

Type Library Importer-Tool (Tlbimp.exe) wendet dieses Attribut auch auf Parameter, Felder und Rückgabewerte an und gibt damit an, dass es sich bei dem Datentyp in der Eingabetypbibliothek nicht um den Standardtyp für den entsprechenden verwalteten Datentyp handelt. Aus Gründen der Eindeutigkeit wendet Tlbimp.exe immer MarshalAsAttribute auf den String-Typ und den Object-Typ an, ungeachtet des in der Eingabetypbibliothek angegebenen Typs.

Hinweis

Das MarshalAsAttribute unterstützt kein Marshalling von generischen Typen.

Beispiel

Im folgenden Beispiel wird die Platzierung von MarshalAsAttribute in verwaltetem Quellcode bei der Anwendung auf Parameter, Felder und Rückgabewerte veranschaulicht.

Imports System.Runtime.InteropServices

Module Program
    'Applied to a parameter.
    Public Sub M1(<MarshalAs(UnmanagedType.LPWStr)> ByVal msg As String)
    End Sub

    'Applied to a field within a class.
    Class MsgText
        <MarshalAs(UnmanagedType.LPWStr)> Public msg As String
    End Class

    'Applied to a a return value.
    Public Function M2() As <MarshalAs(UnmanagedType.LPWStr)> String
    End Function
End Module

//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;
}

//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage();

Vererbungshierarchie

System.Object
   System.Attribute
    System.Runtime.InteropServices.MarshalAsAttribute

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

MarshalAsAttribute-Member
System.Runtime.InteropServices-Namespace
UnmanagedType

Weitere Ressourcen

Type Library Exporter-Tool (Tlbexp.exe)
Type Library Importer-Tool (Tlbimp.exe)