Поделиться через


MarshalAsAttribute Класс

Определение

Указывает способ маршалинга данных между управляемым и неуправляемым кодом.

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
Наследование
MarshalAsAttribute
Атрибуты

Примеры

В следующем примере применяется к полю MarshalAsAttribute , параметру метода и возвращаемого значения метода в управляемом типе.

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 к свойству :

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

Комментарии

Этот атрибут можно применять к параметрам, полям или возвращаемым значениям.

Этот атрибут является необязательным, так как каждый тип данных имеет поведение маршалинга по умолчанию. Этот атрибут необходим только в том случае, если заданный тип можно маршалировать в несколько типов. Например, можно маршалировать строку в неуправляемый LPStrкод как , , LPWStr, LPTStrили BStr. По умолчанию среда CLR маршалирует строковый параметр как в BStr методы COM. Атрибут можно применить MarshalAsAttribute к отдельному полю или параметру, чтобы эта конкретная строка была маршалирована BStrкак LPStr , а не как . Tlbexp.exe (средство экспорта библиотек типов) передает настройки маршалинга в общеязыковой среде выполнения.

Некоторые параметры и возвращаемые значения имеют другое поведение маршалинга по умолчанию при использовании с COM-взаимодействием или вызовом платформы. По умолчанию среда выполнения маршалирует строковый параметр (и поля в типе значения) в качестве LPStr метода или функции вызова платформы. Дополнительные сведения см. в разделе Поведение маршалинга по умолчанию.

В большинстве случаев атрибут просто определяет формат неуправляемых данных с помощью UnmanagedType перечисления , как показано в следующей сигнатуре C#:

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

Для некоторых UnmanagedType элементов перечисления требуются дополнительные сведения. Например, если имеет значение LPArray, требуется UnmanagedType дополнительная информация. Полное описание использования этого атрибута с массивами см. в разделе Маршалинг по умолчанию для массивов.

Tlbimp.exe (средство импорта библиотек типов) также применяет этот атрибут к параметрам, полям и возвращаемым значениям, чтобы указать, что тип данных в библиотеке входных типов не является типом по умолчанию для соответствующего управляемого типа данных. Tlbimp.exe всегда применяет MarshalAsAttribute типы к String и Object для ясности независимо от типа, указанного в библиотеке входных типов.

Примечание

не MarshalAsAttribute поддерживает маршалинг универсальных типов.

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

MarshalAsAttribute(Int16)

Инициализирует новый экземпляр класса MarshalAsAttribute заданным значением UnmanagedType.

MarshalAsAttribute(UnmanagedType)

Инициализирует новый экземпляр класса MarshalAsAttribute с указанным членом перечисления UnmanagedType.

Поля

ArraySubType

Задает тип элемента неуправляемого массива LPArray или ByValArray.

IidParameterIndex

Задает индекс параметра неуправляемого атрибута iid_is, используемого в COM.

MarshalCookie

Предоставляет дополнительные сведения для настраиваемого модуля маршалинга.

MarshalType

Задает полное имя настраиваемого модуля маршалинга.

MarshalTypeRef

Реализует поле MarshalType в виде типа.

SafeArraySubType

Показывает тип элемента для поля SafeArray.

SafeArrayUserDefinedSubType

Указывает определенный пользователем тип элемента для поля SafeArray.

SizeConst

Показывает количество элементов в массиве фиксированной длины или количество знаков (не байтов) в импортируемой строке.

SizeParamIndex

Указывает параметр, содержащий отсчитываемое от нуля количество элементов массива, аналогичный параметру size_is в COM.

Свойства

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

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

Получает значение UnmanagedType, используемое для маршалинга данных.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

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

Возвращает хэш-код данного экземпляра.

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

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

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

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

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

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

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

Создает неполную копию текущего объекта Object.

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

Возвращает строку, представляющую текущий объект.

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

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

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

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

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

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

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.

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

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

См. также раздел