MarshalAsAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje sposób marshalingu danych między kodem zarządzanym i niezarządzanych.
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
- Dziedziczenie
- Atrybuty
Przykłady
Poniższy przykład dotyczy MarshalAsAttribute pola, parametru metody i wartości zwracanej przez metodę w typie zarządzanym.
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
W poniższym przykładzie MarshalAsAttribute atrybut jest stosowany do właściwości :
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
Uwagi
Ten atrybut można zastosować do parametrów, pól lub zwracanych wartości.
Ten atrybut jest opcjonalny, ponieważ każdy typ danych ma domyślne zachowanie marshalingu. Ten atrybut jest wymagany tylko wtedy, gdy dany typ może być marshaled na wiele typów. Można na przykład przeprowadzić marshaling ciągu do niezarządzanego kodu jako LPStr, a LPWStr, a LPTStr, lub BStr. Domyślnie środowisko uruchomieniowe języka wspólnego marshaluje parametr ciągu jako BStr metod COM. Atrybut można zastosować MarshalAsAttribute do pojedynczego pola lub parametru, aby spowodować, że dany ciąg ma być marshaled jako LPStr zamiast BStr. Tlbexp.exe (eksporter biblioteki typów) przekazuje preferencje marshalingu do środowiska uruchomieniowego języka wspólnego.
Niektóre parametry i wartości zwracane mają inne domyślne zachowanie marshalingu w przypadku użycia z międzyoperacyjnością modelu COM lub wywołaniem platformy. Domyślnie środowisko uruchomieniowe marshaluje parametr ciągu (i pola w typie wartości) jako LPStr metodę lub funkcję wywołania platformy. Aby uzyskać dodatkowe informacje, zobacz Domyślne zachowanie marshalingu.
W większości przypadków atrybut po prostu identyfikuje format niezarządzanych danych przy użyciu UnmanagedType wyliczenia, jak pokazano w następującym podpisie języka C#:
public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)
Niektóre UnmanagedType elementy członkowskie wyliczenia wymagają dodatkowych informacji. Na przykład dodatkowe informacje są potrzebne, gdy parametr UnmanagedType to LPArray. Pełny opis sposobu używania tego atrybutu z tablicami można znaleźć w temacie Default Marshaling for Arrays (Domyślne przeprowadzanie marshalingu dla tablic).
Tlbimp.exe (Importer biblioteki typów) stosuje również ten atrybut do parametrów, pól i zwracanych wartości, aby wskazać, że typ danych w bibliotece typów wejściowych nie jest domyślnym typem odpowiedniego zarządzanego typu danych. Tlbimp.exe zawsze stosuje typy MarshalAsAttributeString i Object w celu zachowania przejrzystości, niezależnie od typu określonego w bibliotece typów wejściowych.
Uwaga
Funkcja MarshalAsAttribute nie obsługuje marshalingu typów ogólnych.
Konstruktory
MarshalAsAttribute(Int16) |
Inicjuje MarshalAsAttribute nowe wystąpienie klasy z określoną UnmanagedType wartością. |
MarshalAsAttribute(UnmanagedType) |
Inicjuje MarshalAsAttribute nowe wystąpienie klasy z określonym UnmanagedType elementem członkowskim wyliczenia. |
Pola
ArraySubType |
Określa typ elementu niezarządzanego LPArray lub ByValArray. |
IidParameterIndex |
Określa indeks parametrów niezarządzanego |
MarshalCookie |
Udostępnia dodatkowe informacje dla marshalera niestandardowego. |
MarshalType |
Określa w pełni kwalifikowaną nazwę niestandardowego marshalera. |
MarshalTypeRef |
Implementuje MarshalType jako typ. |
SafeArraySubType |
Wskazuje typ elementu .SafeArray |
SafeArrayUserDefinedSubType |
Wskazuje typ elementu zdefiniowanego przez użytkownika .SafeArray |
SizeConst |
Wskazuje liczbę elementów w tablicy o stałej długości lub liczbę znaków (nie bajtów) w ciągu do zaimportowania. |
SizeParamIndex |
Wskazuje parametr oparty na zerze, który zawiera liczbę elementów tablicy, podobnie jak |
Właściwości
TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu . (Odziedziczone po Attribute) |
Value |
UnmanagedType Pobiera wartość, w ramach których dane mają być marshalowane jako. |
Metody
Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi. (Odziedziczone po Attribute) |
GetHashCode() |
Zwraca wartość skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
IsDefaultAttribute() |
Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej. (Odziedziczone po Attribute) |
Match(Object) |
Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone po Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt. (Odziedziczone po Attribute) |