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 , параметру метода и возвращаемого значения метода в управляемом типе.
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 |
Задает индекс параметра неуправляемого атрибута |
MarshalCookie |
Предоставляет дополнительные сведения для настраиваемого модуля маршалинга. |
MarshalType |
Задает полное имя настраиваемого модуля маршалинга. |
MarshalTypeRef |
Реализует поле MarshalType в виде типа. |
SafeArraySubType |
Показывает тип элемента для поля SafeArray. |
SafeArrayUserDefinedSubType |
Указывает определенный пользователем тип элемента для поля SafeArray. |
SizeConst |
Показывает количество элементов в массиве фиксированной длины или количество знаков (не байтов) в импортируемой строке. |
SizeParamIndex |
Указывает параметр, содержащий отсчитываемое от нуля количество элементов массива, аналогичный параметру |
Свойства
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) |