MarshalAsAttribute Klasa

Definicja

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

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

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ż