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 marshalowania 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 metody 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
Poniższy przykład stosuje MarshalAsAttribute atrybut 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 niezbędny tylko wtedy, gdy dany typ może być marshaled do wielu typów. Można na przykład przeprowadzić marshaling ciągu do niezarządzanego kodu jako LPStr, a LPWStr, a LPTStrlub 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 określony 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łania 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 wyliczenia UnmanagedType , 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órzy UnmanagedType członkowie 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 Domyślne marshaling 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 typu danych zarządzanych. Tlbimp.exe zawsze stosuje MarshalAsAttribute typy String i Object dla jasnoś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 o określonej UnmanagedType wartości. |
MarshalAsAttribute(UnmanagedType) |
Inicjuje MarshalAsAttribute nowe wystąpienie klasy przy użyciu określonego UnmanagedType elementu członkowskiego 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 do niestandardowego marshalera. |
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 zerowy parametr, który zawiera liczbę elementów tablicy, podobnie jak |
Właściwości
TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute. (Odziedziczone po Attribute) |
Value |
UnmanagedType Pobiera wartość, w ramach których dane mają być marshalowane. |
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 bieżące wystąpienie. (Odziedziczone po Object) |
IsDefaultAttribute() |
W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej. (Odziedziczone po Attribute) |
Match(Object) |
W przypadku zastąpienia 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 obiektu, którego można użyć do pobrania informacji o typie 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) |
Dotyczy
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla