PreserveSigAttribute Classe

Definição

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

public ref class PreserveSigAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class PreserveSigAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PreserveSigAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type PreserveSigAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PreserveSigAttribute = class
    inherit Attribute
Public NotInheritable Class PreserveSigAttribute
Inherits Attribute
Herança
PreserveSigAttribute
Atributos

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 ao mesmo método C# e exporta o assembly, a conversão de método é diferente do exemplo anterior. Observe que Tlbexp.exe remove o HRESULT e o modificador de parâmetro [out, retval].

Assinatura gerenciada:

[PreserveSig] int DoSomething (long l);  

Assinatura não gerenciada:

int DoSomething ([in] long l);  

Comentários

Você pode aplicar esse atributo a métodos.

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

A preservação da assinatura do método original é necessária se o membro retornar mais de um valor HRESULT de êxito e você quiser detectar os valores diferentes. Como a maioria dos membros COM retorna um HRESULT, aplicando o PreserveSigAttribute, você pode recuperar um inteiro que representa o HRESULT de êxito ou falha. Tlbexp.exe preserva todos os parâmetros [out, retval] como parâmetros out na assinatura gerenciada.

O Tlbimp.exe (Importador de Biblioteca de Tipos) também aplica esse atributo; aplica o atributo a dispinterfaces quando importa uma biblioteca de tipos.

Observação

Tipos de retorno de Currency, Guide Object não são compatíveis com a classe quando a PreserveSigAttribute interoperação ocorre de COM para código gerenciado e o código gerenciado é marcado com a PreserveSigAttribute classe. Quando você tenta usar um desses tipos de retorno com a PreserveSigAttribute classe durante essas condições, um TypeLoadException é gerado.

Construtores

PreserveSigAttribute()

Inicializa uma nova instância da classe PreserveSigAttribute.

Propriedades

TypeId

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

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a 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 Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

_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 para um objeto, que pode ser usado para obter as informações de tipo para 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)

Aplica-se a

Confira também