MarshalAsAttribute-Klasse
Veröffentlicht: Oktober 2016
Gibt an, wie die Daten zwischen verwaltetem und nicht verwaltetem Code gemarshallt werden sollen.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Vererbungshierarchie
System.Object
System.Attribute
System.Runtime.InteropServices.MarshalAsAttribute
Syntax
[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 : Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue,
Inherited = false)>]
[<ComVisibleAttribute(true)>]
type MarshalAsAttribute =
class
inherit Attribute
end
<AttributeUsageAttribute(AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue,
Inherited := False)>
<ComVisibleAttribute(True)>
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
Konstruktoren
Name | Beschreibung | |
---|---|---|
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. |
Eigenschaften
Name | Beschreibung | |
---|---|---|
TypeId | Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.) |
|
Value | Ruft den UnmanagedType -Wert, die Daten als gemarshallt werden. |
Methoden
Name | Beschreibung | |
---|---|---|
Equals(Object) | Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. 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) | Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.) |
|
ToString() | Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.) |
Felder
Name | Beschreibung | |
---|---|---|
ArraySubType | Gibt den Elementtyp des nicht verwalteten UnmanagedType.LPArray oder UnmanagedType.ByValArray. |
|
IidParameterIndex | Gibt den Parameterindex des nicht verwalteten iid_is Attribut, das von COM. |
|
MarshalCookie | Enthält zusätzliche Informationen für einen benutzerdefinierten Marshaller. |
|
MarshalType | Gibt den vollqualifizierten Namen eines benutzerdefinierten Marshallers. |
|
MarshalTypeRef | Implementiert MarshalAsAttribute.MarshalType als Typ. |
|
SafeArraySubType | Gibt den Elementtyp von der UnmanagedType.SafeArray. |
|
SafeArrayUserDefinedSubType | Gibt den benutzerdefinierten Elementtyp von der UnmanagedType.SafeArray. |
|
SizeConst | Gibt die Anzahl der Elemente im Array fester Länge oder die Anzahl der Zeichen (nicht Bytes) in einer Zeichenfolge zu importieren. |
|
SizeParamIndex | Gibt den nullbasierten Parameter an, die die Anzahl der Arrayelemente, die ähnlich wie enthält size_is in COM. |
Explizite Schnittstellenimplementierungen
Name | Beschreibung | |
---|---|---|
_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“.) |
Hinweise
You can apply this attribute to parameters, fields, or return values.
This attribute is optional, as each data type has a default marshaling behavior. This attribute is only necessary when a given type can be marshaled to multiple types. For example, you can marshal a string to unmanaged code as either a F:System.Runtime.InteropServices.UnmanagedType.LPStr, a F:System.Runtime.InteropServices.UnmanagedType.LPWStr, a F:System.Runtime.InteropServices.UnmanagedType.LPTStr, or a F:System.Runtime.InteropServices.UnmanagedType.BStr. By default, the common language runtime marshals a string parameter as a F:System.Runtime.InteropServices.UnmanagedType.BStr to COM methods. You can apply the T:System.Runtime.InteropServices.MarshalAsAttribute attribute to an individual field or parameter to cause that particular string to be marshaled as a F:System.Runtime.InteropServices.UnmanagedType.LPStr instead of a F:System.Runtime.InteropServices.UnmanagedType.BStr. The [<topic://cpgrfTypeLibraryExporterTlbexpexe>] passes your marshaling preferences to the common language runtime.
Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. By default, the runtime marshals a string parameter (and fields in a value type) as a F:System.Runtime.InteropServices.UnmanagedType.LPStr to a platform invoke method or function. For additional information, see [<topic://cpcondefaultmarshalingbehavior>].
In most cases, the attribute simply identifies the format of the unmanaged data using the T:System.Runtime.InteropServices.UnmanagedType enumeration, as shown in the following C# signature:
public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)
Some T:System.Runtime.InteropServices.UnmanagedType enumeration members require additional information. For example, additional information is needed when the T:System.Runtime.InteropServices.UnmanagedType is F:System.Runtime.InteropServices.UnmanagedType.LPArray. For a complete description of how to use this attribute with arrays, see [<topic://cpcondefaultmarshalingforarrays>].
The [<topic://cpgrfTypeLibraryImporterTlbimpexe>] also applies this attribute to parameters, fields, and return values to indicate that the data type in the input type library is not the default type for the corresponding managed data type. Tlbimp.exe always applies the T:System.Runtime.InteropServices.MarshalAsAttribute to T:System.String and T:System.Object types for clarity, regardless of the type specified in the input type library.
Hinweis
The T:System.Runtime.InteropServices.MarshalAsAttribute does not support marshaling of generic types.
Beispiele
The following example applies the T:System.Runtime.InteropServices.MarshalAsAttribute to a field, a method parameter, and a method return value in a managed 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 a return value.
Public Function M2() As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
Return "Hello World"
End Function
End Module
The following example applies the T:System.Runtime.InteropServices.MarshalAsAttribute attribute to a property:
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
Versionsinformationen
Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Threadsicherheit
Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.
Siehe auch
UnmanagedType
System.Runtime.InteropServices-Namespace
Tlbexp.exe (Type Library Exporter)
Tlbimp.exe (Type Library Importer)
Zurück zum Anfang