MarshalAsAttribute Класс

Определение

Указывает способ маршалинга данных между управляемым и неуправляемым кодом.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
Наследование
MarshalAsAttribute
Атрибуты

Примеры

Следующий пример применяет MarshalAsAttribute к полю, параметру метода и возвращаемому значению метода в управляемом типе.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

В следующем примере MarshalAsAttribute атрибут применяется к свойству: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

Комментарии

Этот атрибут можно применить к параметрам, полям или возвращаемым значениям.You can apply this attribute to parameters, fields, or return values.

Этот атрибут является необязательным, так как каждый тип данных имеет поведение маршалинга по умолчанию.This attribute is optional, as each data type has a default marshaling behavior. Этот атрибут необходим только в том случае, если данный тип может быть упакован в несколько типов.This attribute is only necessary when a given type can be marshaled to multiple types. Например, можно LPStrмаршалировать строку в неуправляемый код как LPWStr, LPTStr, или, или BStr.For example, you can marshal a string to unmanaged code as either a LPStr, a LPWStr, a LPTStr, or a BStr. По умолчанию среда CLR маршалирует строковый параметр BStr в методы COM.By default, the common language runtime marshals a string parameter as a BStr to COM methods. Можно применить MarshalAsAttribute атрибут к отдельному полю или параметру, чтобы эта конкретная строка была упакована LPStr как вместо 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 (средство экспорта библиотек типов) передает параметры маршалирования в среду CLR.The Tlbexp.exe (Type Library Exporter) passes your marshaling preferences to the common language runtime.

Некоторые параметры и возвращаемые значения имеют разное поведение маршалинга по умолчанию при использовании с COM-взаимодействием или вызовом неуправляемого кода.Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. По умолчанию среда выполнения маршалирует строковый параметр (и поля в типе значения) в качестве LPStr метода вызова или функции неуправляемого кода.By default, the runtime marshals a string parameter (and fields in a value type) as a LPStr to a platform invoke method or function. Дополнительные сведения см. в разделе поведение маршалинга по умолчанию.For additional information, see Default Marshaling Behavior.

В большинстве случаев атрибут просто определяет формат неуправляемых данных с помощью UnmanagedType перечисления, как показано в следующей C# сигнатуре: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)

Для UnmanagedType некоторых членов перечисления требуются дополнительные сведения.Some UnmanagedType enumeration members require additional information. Например, дополнительные сведения необходимы, если UnmanagedType имеет LPArrayзначение.For example, additional information is needed when the UnmanagedType is LPArray. Полное описание использования этого атрибута с массивами см. в разделе маршалирование по умолчанию для массивов.For a complete description of how to use this attribute with arrays, see Default Marshaling for Arrays.

Tlbimp. exe (программа импорта библиотек типов) также применяет этот атрибут к параметрам, полям и возвращаемым значениям, чтобы указать, что тип данных в библиотеке входных типов не является типом по умолчанию для соответствующего управляемого типа данных.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. Программа Tlbimp. exe всегда MarshalAsAttribute применяет Object к String и типы для ясности, независимо от типа, указанного в библиотеке типов входных данных.Tlbimp.exe always applies the MarshalAsAttribute to String and Object types for clarity, regardless of the type specified in the input type library.

Примечание

MarshalAsAttribute Не поддерживает упаковку универсальных типов.The MarshalAsAttribute does not support marshaling of generic types.

Конструкторы

MarshalAsAttribute(Int16)

Инициализирует новый экземпляр класса MarshalAsAttribute заданным значением UnmanagedType.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value.

MarshalAsAttribute(UnmanagedType)

Инициализирует новый экземпляр класса MarshalAsAttribute с указанным членом перечисления UnmanagedType.Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType enumeration member.

Поля

ArraySubType

Задает тип элемента неуправляемого массива LPArray или ByValArray.Specifies the element type of the unmanaged LPArray or ByValArray.

IidParameterIndex

Задает индекс параметра неуправляемого атрибута iid_is, используемого в COM.Specifies the parameter index of the unmanaged iid_is attribute used by COM.

MarshalCookie

Предоставляет дополнительные сведения для настраиваемого модуля маршалинга.Provides additional information to a custom marshaler.

MarshalType

Задает полное имя настраиваемого модуля маршалинга.Specifies the fully qualified name of a custom marshaler.

MarshalTypeRef

Реализует поле MarshalType в виде типа.Implements MarshalType as a type.

SafeArraySubType

Показывает тип элемента для поля SafeArray.Indicates the element type of the SafeArray.

SafeArrayUserDefinedSubType

Указывает определенный пользователем тип элемента для поля SafeArray.Indicates the user-defined element type of the SafeArray.

SizeConst

Показывает количество элементов в массиве фиксированной длины или количество знаков (не байтов) в импортируемой строке.Indicates the number of elements in the fixed-length array or the number of characters (not bytes) in a string to import.

SizeParamIndex

Указывает параметр, содержащий отсчитываемое от нуля количество элементов массива, аналогичный параметру size_is в COM.Indicates the zero-based parameter that contains the count of array elements, similar to size_is in COM.

Свойства

TypeId

При реализации в производном классе возвращает уникальный идентификатор для этого Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Унаследовано от Attribute)
Value

Получает значение UnmanagedType, используемое для маршалинга данных.Gets the UnmanagedType value the data is to be marshaled as.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.Returns a value that indicates whether this instance is equal to a specified object.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.Returns the hash code for this instance.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Явные реализации интерфейса

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

(Унаследовано от Attribute)

Применяется к

Дополнительно