MarshalAsAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Indica como fazer marshaling dos dados entre código gerenciado e não gerenciado.
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
- Herança
- Atributos
Exemplos
O exemplo a seguir aplica-se a MarshalAsAttribute um campo, um parâmetro de método e um valor de retorno de método em um tipo gerenciado.
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
O exemplo a seguir aplica o MarshalAsAttribute atributo a uma propriedade:
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
Comentários
Você pode aplicar esse atributo a parâmetros, campos ou valores retornados.
Esse atributo é opcional, pois cada tipo de dados tem um comportamento de marshaling padrão. Esse atributo só é necessário quando um determinado tipo pode ser empacotado em vários tipos. Por exemplo, você pode fazer marshaling de uma cadeia de caracteres para código não gerenciado como um LPStr, um LPWStr, um LPTStrou um BStr. Por padrão, o common language runtime faz marshaling de um parâmetro de cadeia de caracteres como métodos BStr COM. Você pode aplicar o MarshalAsAttribute atributo a um campo ou parâmetro individual para fazer com que essa cadeia de caracteres específica seja marshalada como um LPStr em vez de um BStr. O Tlbexp.exe (Exportador da Biblioteca de Tipos) passa suas preferências de marshaling para o common language runtime.
Alguns parâmetros e valores retornados têm um comportamento de marshaling padrão diferente quando usados com interoperabilidade COM ou invocação de plataforma. Por padrão, o runtime faz marshaling de um parâmetro de cadeia de caracteres (e campos em um tipo de valor) como um LPStr método ou função de invocação de plataforma. Para obter informações adicionais, consulte Comportamento de Marshaling Padrão.
Na maioria dos casos, o atributo simplesmente identifica o formato dos dados não gerenciados usando a UnmanagedType enumeração, conforme mostrado na seguinte assinatura C#:
public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)
Alguns UnmanagedType membros de enumeração exigem informações adicionais. Por exemplo, informações adicionais são necessárias quando se UnmanagedType trata LPArray. Para obter uma descrição completa de como usar esse atributo com matrizes, consulte Marshaling Padrão para Matrizes.
O Tlbimp.exe (Importador de Biblioteca de Tipos) também aplica esse atributo a parâmetros, campos e valores de retorno para indicar que o tipo de dados na biblioteca de tipos de entrada não é o tipo padrão para o tipo de dados gerenciado correspondente. Tlbimp.exe sempre aplica os MarshalAsAttribute tipos e Object à String clareza, independentemente do tipo especificado na biblioteca de tipos de entrada.
Note
O MarshalAsAttribute não dá suporte ao marshaling de tipos genéricos.
Construtores
| Nome | Description |
|---|---|
| MarshalAsAttribute(Int16) |
Inicializa uma nova instância da MarshalAsAttribute classe com o valor especificado UnmanagedType . |
| MarshalAsAttribute(UnmanagedType) |
Inicializa uma nova instância da MarshalAsAttribute classe com o membro de enumeração especificado UnmanagedType . |
Campos
| Nome | Description |
|---|---|
| ArraySubType |
Especifica o tipo de elemento do não gerenciado LPArray ou ByValArray. |
| IidParameterIndex |
Especifica o índice de parâmetro do atributo não gerenciado |
| MarshalCookie |
Fornece informações adicionais para um marshaler personalizado. |
| MarshalType |
Especifica o nome totalmente qualificado de um marshaler personalizado. |
| MarshalTypeRef |
MarshalType Implementa como um tipo. |
| SafeArraySubType |
Indica o tipo de elemento do SafeArray. |
| SafeArrayUserDefinedSubType |
Indica o tipo de elemento definido pelo usuário do SafeArray. |
| SizeConst |
Indica o número de elementos na matriz de comprimento fixo ou o número de caracteres (não bytes) em uma cadeia de caracteres a ser importada. |
| SizeParamIndex |
Indica o parâmetro baseado em zero que contém a contagem de elementos de matriz, semelhante ao |
Propriedades
| Nome | Description |
|---|---|
| TypeId |
Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse Attribute. (Herdado de Attribute) |
| Value |
Obtém o UnmanagedType valor em que os dados devem ser empacotados. |
Métodos
| Nome | Description |
|---|---|
| Equals(Object) |
Retorna um valor que indica se essa instância é igual a um objeto especificado. (Herdado de Attribute) |
| GetHashCode() |
Devolve o código hash para esta instância. (Herdado de Attribute) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsDefaultAttribute() |
Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada. (Herdado de Attribute) |
| Match(Object) |
Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado. (Herdado de Attribute) |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição. (Herdado de Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera as informações de tipo de um objeto, que podem ser usadas para obter as informações de tipo de uma interface. (Herdado de Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1). (Herdado de Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Fornece acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute) |