MarshalAsAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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 |
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 |
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) |