MarshalAsAttribute Osztály

Definíció

Azt jelzi, hogyan lehet az adatokat a felügyelt és a nem felügyelt kód között létrehozni.

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
Öröklődés
MarshalAsAttribute
Attribútumok

Példák

Az alábbi példa egy MarshalAsAttribute mezőre, egy metódusparaméterre és egy felügyelt típusú metódus visszatérési értékére vonatkozik.

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

Az alábbi példa az MarshalAsAttribute attribútumot egy tulajdonságra alkalmazza:

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

Megjegyzések

Ezt az attribútumot paraméterekre, mezőkre vagy visszaadott értékekre alkalmazhatja.

Ez az attribútum nem kötelező, mivel minden adattípus alapértelmezett adatalkotó viselkedéssel rendelkezik. Ez az attribútum csak akkor szükséges, ha egy adott típus több típushoz is hozzárendelhető. Létrehozhat például egy sztringet a nem felügyelt kódra, például egy LPStr, egy LPWStrLPTStrvagy egy BStr. Alapértelmezés szerint a közös nyelvi futtatókörnyezet egy sztringparamétert hoz létre COM-metódusokként BStr . MarshalAsAttribute Az attribútumot alkalmazhatja egy adott mezőre vagy paraméterre, hogy az adott sztringet LPStr a rendszer ahelyett, hogy egy BStr. A Tlbexp.exe (típuskódtár-exportőr) a közös nyelvi futtatókörnyezetre továbbítja a marshaling beállításokat.

Egyes paraméterek és visszatérési értékek eltérő alapértelmezett marshaling viselkedéssel rendelkeznek a COM-interop vagy platformhívások használatakor. A futtatókörnyezet alapértelmezés szerint egy sztringparamétert (és értéktípusú mezőket) alkalmaz platformhívási metódusként vagy függvényként LPStr . További információ: Alapértelmezett marshaling behavior.

Az attribútum a legtöbb esetben egyszerűen azonosítja a nem felügyelt adatok formátumát az UnmanagedType enumerálás használatával, ahogyan az a következő C#-aláírásban is látható:

public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)

Egyes UnmanagedType enumerálási tagok további információkat igényelnek. Például további információra van szükség, ha a UnmanagedTypeLPArray. Az attribútum tömbökkel való használatának teljes leírását a Tömbök alapértelmezett marshaling elemében találhatja meg.

A Tlbimp.exe (Típustár-importáló) ezt az attribútumot paraméterekre, mezőkre és visszatérési értékekre is alkalmazza, jelezve, hogy a bemeneti típusú kódtár adattípusa nem az alapértelmezett típus a megfelelő felügyelt adattípushoz. Tlbimp.exe mindig a bemeneti típustárban megadott típustól függetlenül alkalmazza a MarshalAsAttributeString típusokat és Object a típusokat az egyértelműség érdekében.

Note

Ez MarshalAsAttribute nem támogatja az általános típusok marsallálását.

Konstruktorok

Name Description
MarshalAsAttribute(Int16)

Inicializálja az osztály új példányát MarshalAsAttribute a megadott UnmanagedType értékkel.

MarshalAsAttribute(UnmanagedType)

Inicializálja az osztály új példányát MarshalAsAttribute a megadott UnmanagedType enumerálási taggal.

Mezők

Name Description
ArraySubType

A nem felügyelt vagy LPArraya nem felügyelt elem elemtípusát ByValArray adja meg.

IidParameterIndex

A COM által használt nem felügyelt iid_is attribútum paraméterindexét adja meg.

MarshalCookie

További információt nyújt egy egyéni marsallnak.

MarshalType

Egy egyéni marsall teljes nevét adja meg.

MarshalTypeRef

Típusként implementál MarshalType .

SafeArraySubType

A elemtípusát SafeArrayjelzi.

SafeArrayUserDefinedSubType

A felhasználó által definiált elemtípust jelzi a SafeArray.

SizeConst

A rögzített hosszúságú tömb elemeinek számát vagy az importálandó sztringben szereplő karakterek számát (nem bájt) jelzi.

SizeParamIndex

A COM-hoz hasonló size_is tömbelemek számát tartalmazó nulla alapú paramétert jelöli.

Tulajdonságok

Name Description
TypeId

Ha származtatott osztályban implementálják, ehhez egy egyedi azonosítót Attributekap.

(Öröklődés forrása Attribute)
Value

Lekéri azt az UnmanagedType értéket, amelyet az adatoknak a következőképpen kell létrehozniuk.

Metódusok

Name Description
Equals(Object)

Olyan értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal.

(Öröklődés forrása Attribute)
GetHashCode()

A példány kivonatkódját adja vissza.

(Öröklődés forrása Attribute)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
IsDefaultAttribute()

Ha egy származtatott osztályban felül van bírálva, azt jelzi, hogy a példány értéke-e a származtatott osztály alapértelmezett értéke.

(Öröklődés forrása Attribute)
Match(Object)

Származtatott osztály felülírásakor egy olyan értéket ad vissza, amely jelzi, hogy ez a példány egy adott objektummal egyenlő-e.

(Öröklődés forrása Attribute)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Explicit interfész-implementációk

Name Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Névkészletet képez le a küldési azonosítók megfelelő készletére.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek a felület típusadatainak lekérésére használhatók.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

(Öröklődés forrása Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

(Öröklődés forrása Attribute)

A következőre érvényes:

Lásd még