MarshalAsAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica como organizar os dados entre código gerido e não gerido.
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 seguinte aplica-se a MarshalAsAttribute um campo, um parâmetro de método e um valor de retorno de método num tipo gerido.
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 seguinte 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
Observações
Pode aplicar este atributo a parâmetros, campos ou valores de retorno.
Este atributo é opcional, pois cada tipo de dado tem um comportamento de marshaling por defeito. Este atributo só é necessário quando um dado tipo pode ser marshalado para múltiplos tipos. Por exemplo, pode enviar uma string para código não gerido como um LPStr, um LPWStr, um LPTStr, ou um BStr. Por defeito, o runtime da linguagem comum associa um parâmetro de string como a BStr aos métodos COM. Pode aplicar o MarshalAsAttribute atributo a um campo ou parâmetro individual para fazer com que essa string seja marshalada como um LPStr em vez de um BStr. O Tlbexp.exe (Type Library Exporter) passa as suas preferências de marshaling para o runtime da linguagem comum.
Alguns parâmetros e valores de retorno apresentam comportamentos de marshaling padrão diferentes quando usados com interoperabilidade COM ou invocação de plataforma. Por defeito, o runtime faz um parâmetro de string (e campos num tipo de valor) como um LPStr método ou função de invocação de plataforma. Para informações adicionais, consulte Comportamento de Marshaling Padrão.
Na maioria dos casos, o atributo identifica simplesmente o formato dos dados não geridos usando a UnmanagedType enumeração, como 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 da enumeração requerem informações adicionais. Por exemplo, é necessária informação adicional quando o UnmanagedType é LPArray. Para uma descrição completa de como usar este atributo com arrays, veja Marshaling Padrão para Arrays.
O Tlbimp.exe (Importador de Biblioteca de Tipos) também aplica este atributo a parâmetros, campos e valores de retorno para indicar que o tipo de dado na biblioteca de tipos de entrada não é o tipo padrão para o tipo de dados gerido correspondente. Tlbimp.exe aplica sempre os MarshalAsAttribute tipos a String e Object para maior clareza, independentemente do tipo especificado na biblioteca de tipos de entrada.
Note
O MarshalAsAttribute não suporta o agrupamento de tipos genéricos.
Construtores
| Name | 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
| Name | Description |
|---|---|
| ArraySubType |
Especifica o tipo de elemento do não gerido LPArray ou ByValArray. |
| IidParameterIndex |
Especifica o índice de parâmetros do atributo não gerido |
| MarshalCookie |
Fornece informações adicionais ao marshaler personalizado. |
| MarshalType |
Especifica o nome totalmente qualificado de um marshaler personalizado. |
| MarshalTypeRef |
Implementos MarshalType como tipo. |
| SafeArraySubType |
Indica o tipo de elemento do SafeArray. |
| SafeArrayUserDefinedSubType |
Indica o tipo de elemento definido pelo utilizador do SafeArray. |
| SizeConst |
Indica o número de elementos no array de comprimento fixo ou o número de caracteres (não bytes) numa string a importar. |
| SizeParamIndex |
Indica o parâmetro baseado em zero que contém a contagem de elementos do array, semelhante ao |
Propriedades
| Name | Description |
|---|---|
| TypeId |
Quando implementado numa classe derivada, obtém um identificador único para esta Attribute. (Herdado de Attribute) |
| Value |
Obtém o UnmanagedType valor que os dados devem ser organizados. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| GetHashCode() |
Devolve o código de hash para esta instância. (Herdado de Attribute) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsDefaultAttribute() |
Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute) |
| Match(Object) |
Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
Implementações de Interface Explícita
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho. (Herdado de Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface. (Herdado de Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). (Herdado de Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Proporciona acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute) |