Udostępnij za pośrednictwem


MarshalAsAttribute Klasa

Definicja

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
MarshalAsAttribute
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 iid_is atrybutu używanego przez com.

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 size_is w modelu COM.

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)

Dotyczy

Zobacz też