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

Комментарии

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

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

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

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

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

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

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

Note

Не 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)

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

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