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 do método difere 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 retornado da função. O S_OK HRESULT é descartado. Para HRESULTs diferentes de 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 bem-sucedido 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 da Biblioteca de Tipos) também aplica esse atributo; aplica o atributo a dispinterfaces quando importa uma biblioteca de tipos.

Note

Tipos de retorno de Currency, Guide Object não são suportados pela 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

Nome Description
PreserveSigAttribute()

Inicializa uma nova instância da classe PreserveSigAttribute.

Propriedades

Nome Description
TypeId

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

(Herdado de Attribute)

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)

Aplica-se a

Confira também