MarshalAsAttribute Třída

Definice

Označuje způsob zařazení dat mezi spravovaným a nespravovaným kódem.Indicates how to marshal the data between managed and unmanaged code.

public ref class MarshalAsAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class MarshalAsAttribute : Attribute
type MarshalAsAttribute = class
    inherit Attribute
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
Dědičnost
MarshalAsAttribute
Atributy

Příklady

Následující příklad platí MarshalAsAttribute pro pole, parametr metody a návratovou hodnotu metody ve spravovaném typu.The following example applies the MarshalAsAttribute to a field, a method parameter, and a method return value in a managed type.

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

Následující příklad aplikuje MarshalAsAttribute atribut na vlastnost:The following example applies the MarshalAsAttribute attribute to a property:

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

Poznámky

Tento atribut lze použít u parametrů, polí nebo vrácených hodnot.You can apply this attribute to parameters, fields, or return values.

Tento atribut je volitelný, protože každý datový typ má výchozí chování zařazování.This attribute is optional, as each data type has a default marshaling behavior. Tento atribut je nezbytný pouze v případě, že daný typ lze zařadit do více typů.This attribute is only necessary when a given type can be marshaled to multiple types. Například můžete zařadit řetězec do nespravovaného LPStrkódu jako buď a LPWStr, a BStr, LPTStrnebo.For example, you can marshal a string to unmanaged code as either a LPStr, a LPWStr, a LPTStr, or a BStr. Ve výchozím nastavení zařazuje modul CLR (Common Language Runtime) parametr řetězce BStr jako metody modelu COM.By default, the common language runtime marshals a string parameter as a BStr to COM methods. Můžete použít MarshalAsAttribute atribut na jednotlivá pole nebo parametr a způsobit tak, že konkrétní řetězec bude zařazen LPStr jako místo a BStr.You can apply the MarshalAsAttribute attribute to an individual field or parameter to cause that particular string to be marshaled as a LPStr instead of a BStr. Tlbexp. exe (Exportér knihovny typů) předá vaše preference zařazování do modulu CLR (Common Language Runtime).The Tlbexp.exe (Type Library Exporter) passes your marshaling preferences to the common language runtime.

Některé parametry a návratové hodnoty mají odlišné výchozí chování při zařazování při použití s zprostředkovatelem komunikace s objekty COM nebo voláním platformy.Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. Ve výchozím nastavení modul runtime zařazování řetězcového parametru (a polí v hodnotovém typu) jako LPStr metodu volání metody nebo funkce.By default, the runtime marshals a string parameter (and fields in a value type) as a LPStr to a platform invoke method or function. Další informace najdete v tématu výchozí chování zařazování.For additional information, see Default Marshaling Behavior.

Ve většině případů atribut jednoduše identifikuje formát nespravovaných dat pomocí UnmanagedType výčtu, jak je znázorněno v následujícím C# podpisu:In most cases, the attribute simply identifies the format of the unmanaged data using the UnmanagedType enumeration, as shown in the following C# signature:

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

Některé UnmanagedType členy výčtu vyžadují další informace.Some UnmanagedType enumeration members require additional information. Například Další informace jsou nutné v případě, že UnmanagedType je LPArray.For example, additional information is needed when the UnmanagedType is LPArray. Úplný popis způsobu použití tohoto atributu s poli naleznete v tématu Výchozí zařazování pro pole.For a complete description of how to use this attribute with arrays, see Default Marshaling for Arrays.

Nástroj Tlbimp. exe (importér knihovny typů) používá tento atribut také pro parametry, pole a návratové hodnoty, které označují, že datový typ v knihovně vstupního typu není výchozím typem pro odpovídající spravovaný datový typ.The Tlbimp.exe (Type Library Importer) also applies this attribute to parameters, fields, and return values to indicate that the data type in the input type library is not the default type for the corresponding managed data type. Nástroj MarshalAsAttribute Tlbimp.Object exe vždy pro přehlednost používá typy aa,bezohledunatypzadanývknihovněvstupníhotypu.StringTlbimp.exe always applies the MarshalAsAttribute to String and Object types for clarity, regardless of the type specified in the input type library.

Poznámka

MarshalAsAttribute Nepodporuje zařazování generických typů.The MarshalAsAttribute does not support marshaling of generic types.

Konstruktory

MarshalAsAttribute(Int16)

Inicializuje novou instanci MarshalAsAttribute třídy se zadanou UnmanagedType hodnotou.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value.

MarshalAsAttribute(UnmanagedType)

Inicializuje novou instanci MarshalAsAttribute třídy se zadaným UnmanagedType členem výčtu.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType enumeration member.

Pole

ArraySubType

Určuje typ prvku nespravovaného LPArray nebo. ByValArraySpecifies the element type of the unmanaged LPArray or ByValArray.

IidParameterIndex

Určuje index parametru nespravovaného iid_is atributu používaného modelem COM.Specifies the parameter index of the unmanaged iid_is attribute used by COM.

MarshalCookie

Poskytuje další informace pro vlastní zařazování.Provides additional information to a custom marshaler.

MarshalType

Určuje plně kvalifikovaný název vlastního zařazovacího modulu.Specifies the fully qualified name of a custom marshaler.

MarshalTypeRef

Implementuje MarshalType jako typ.Implements MarshalType as a type.

SafeArraySubType

Určuje typ SafeArrayelementu.Indicates the element type of the SafeArray.

SafeArrayUserDefinedSubType

Určuje uživatelsky definovaný typ SafeArrayelementu.Indicates the user-defined element type of the SafeArray.

SizeConst

Určuje počet prvků v poli pevné délky nebo počet znaků (ne bajtů) v řetězci, který má být importován.Indicates the number of elements in the fixed-length array or the number of characters (not bytes) in a string to import.

SizeParamIndex

Určuje parametr založený na nule, který obsahuje počet prvků pole, podobně jako size_is v modelu COM.Indicates the zero-based parameter that contains the count of array elements, similar to size_is in COM.

Vlastnosti

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Zděděno od Attribute)
Value

UnmanagedType Získá hodnotu, jako jakou mají být data zařazena.Gets the UnmanagedType value the data is to be marshaled as.

Metody

Equals(Object)

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.Returns a value that indicates whether this instance is equal to a specified object.

(Zděděno od Attribute)
GetHashCode()

Vrátí kód hash této instance.Returns the hash code for this instance.

(Zděděno od Attribute)
GetType()

Získá Type aktuální instance.Gets the Type of the current instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě označuje, zda je hodnota této instance výchozí hodnotou pro odvozenou třídu.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda je tato instance rovna zadanému objektu.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří kopii aktuálního Objectbez podstruktury.Creates a shallow copy of the current Object.

(Zděděno od Object)
ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.Maps a set of names to a corresponding set of dispatch identifiers.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu pro objekt, který lze použít k získání informací o typu pro rozhraní.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.Provides access to properties and methods exposed by an object.

(Zděděno od Attribute)

Platí pro

Viz také