Compartilhar via


Classe PreserveSigAttribute

 

Indica que o HRESULT ou a transformação de assinatura de retval que ocorre durante as chamadas de interoperabilidade COM deve ser suprimida.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (em mscorlib.dll)

Hierarquia de Herança

System.Object
  System.Attribute
    System.Runtime.InteropServices.PreserveSigAttribute

Sintaxe

[AttributeUsageAttribute(AttributeTargets.Method, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class PreserveSigAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, Inherited = false)]
[ComVisibleAttribute(true)]
public ref class PreserveSigAttribute sealed : Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Method, Inherited = false)>]
[<ComVisibleAttribute(true)>]
type PreserveSigAttribute = 
    class
        inherit Attribute
    end
<AttributeUsageAttribute(AttributeTargets.Method, Inherited := False)>
<ComVisibleAttribute(True)>
Public NotInheritable Class PreserveSigAttribute
    Inherits Attribute

Construtores

Nome Descrição
System_CAPS_pubmethod PreserveSigAttribute()

Inicializa uma nova instância da classe PreserveSigAttribute.

Propriedades

Nome Descrição
System_CAPS_pubproperty TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.(Herdado de Attribute.)

Métodos

Nome Descrição
System_CAPS_pubmethod Equals(Object)

Esta API dá suporte à infraestrutura produto e não se destina a ser usada diretamente do seu código. Retorna um valor que indica se essa instância é igual a um objeto especificado.(Herdado de Attribute.)

System_CAPS_pubmethod GetHashCode()

Retorna o código hash para essa instância.(Herdado de Attribute.)

System_CAPS_pubmethod GetType()

Obtém o Type da instância atual.(Herdado de Object.)

System_CAPS_pubmethod 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.)

System_CAPS_pubmethod 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.)

System_CAPS_pubmethod ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.(Herdado de Object.)

Implementações Explícitas da Interface

Nome Descrição
System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.(Herdado de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.(Herdado de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).(Herdado de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.(Herdado de Attribute.)

Comentários

Você pode aplicar esse atributo para métodos.

Por padrão, o Tlbexp.exe (Exportador de Biblioteca de Tipos) garante que uma chamada que retorna um HRESULT de S_OK é transformada, de forma que [out, retval] parâmetro é usado como o valor de retorno da função. O HRESULT S_OK será descartado. Para os HRESULTs diferente S_OK, o tempo de execução lança uma exceção e descarta o [out, retval] parâmetro. Quando você aplica a PreserveSigAttribute para uma assinatura de método gerenciado, as assinaturas gerenciadas e o método atribuído são idênticas.

Preservando a assinatura do método original é necessário se o membro retorna mais de um valor HRESULT de êxito e você deseja detectar os diferentes valores. Como a maioria dos membros de COM retornam um HRESULT, aplicando o PreserveSigAttribute, você pode recuperar um inteiro que representa o êxito ou falha HRESULT. TlbExp.exe preserva qualquer [out, retavl] parâmetros como parâmetros na assinatura gerenciada.

O Tlbimp.exe (Importador de Biblioteca de Tipos) também se aplica esse atributo; ele aplica o atributo dispinterfaces ao importar uma biblioteca de tipos.

Dica

Retornar tipos de Currency, Guid, e Object não oferece suporte a PreserveSigAttribute classe quando ocorre um interoperação de COM para código gerenciado e o código gerenciado é marcado com o PreserveSigAttribute classe. Quando você tenta usar um desses tipos de retorno com o PreserveSigAttribute classe durante essas condições, um TypeLoadException é gerada.

Exemplos

O exemplo a seguir mostra como Tlbexp.exe converte um método c# sem PreserveSigAttribute ao exportar um assembly para uma biblioteca de tipos COM.

Assinatura gerenciada:

int DoSomething (long l);

Assinatura não gerenciada:

HRESULT DoSomething ([in] long l, [out, retval] int * i);

Quando você aplica PreserveSigAttribute para o mesmo método em c# e exporta o assembly, a conversão do método é diferente do exemplo anterior. Observe que Tlbexp.exe remove o HRESULT e [out, retval] modificador de parâmetro.

Assinatura gerenciada:

[PreserveSig] int DoSomething (long l);

Assinatura não gerenciada:

int DoSomething ([in] long l);

Informações de Versão

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1

Acesso thread-safe

Quaisquer membros estáticos públicos ( Compartilhado no Visual Basic) desse tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Confira Também

Namespace System.Runtime.InteropServices
Tlbexp.exe (Exportador de Biblioteca de Tipos)
Tlbimp.exe (Importador de Biblioteca de Tipos)

Retornar ao início