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)