PreserveSigAttribute Classe

Definição

Indica que a transformação da assinatura HRESULT que ocorre durante as 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 seguinte mostra como Tlbexp.exe converte um método C# sem PreserveSigAttribute exportar um assembly para uma biblioteca de tipos COM.

Assinatura gerida:

int DoSomething (long l);

Assinatura não gerida:

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

Quando aplicas PreserveSigAttribute ao mesmo método C# e exportas a montagem, a conversão do método difere do exemplo anterior. Repare que Tlbexp.exe remove o HRESULT e o modificador de parâmetro [out, retval].

Assinatura gerida:

[PreserveSig] int DoSomething (long l);

Assinatura não gerida:

int DoSomething ([in] long l);

Observações

Pode aplicar esta característica a métodos.

Por defeito, o Tlbexp.exe (Type Library Exporter) assegura que uma chamada que devolve um HRESULT de S_OK é transformada de modo a que o parâmetro [out, retval] seja usado como valor de retorno da função. O S_OK HRESULT é descartado. Para HRESULTs que não sejam S_OK, o runtime lança uma exceção e descarta o parâmetro [out, retval]. Quando aplicas o PreserveSigAttribute a uma assinatura de método gerido, as assinaturas geridas e não geridas do método atribuído são idênticas.

Preservar a assinatura original do método é necessário se o membro devolver mais do que um valor HRESULT bem-sucedido e quiser detetar os diferentes valores. Como a maioria dos membros do COM retorna um HRESULT, ao aplicar o PreserveSigAttribute, pode obter um inteiro que representa o HRESULT de sucesso ou falha. Tlbexp.exe preserva quaisquer parâmetros [out, retval] como parâmetros out na assinatura gerida.

O Tlbimp.exe (Type Library Importer) também aplica este atributo; Aplica o atributo a disinterfaces quando importa uma biblioteca de tipos.

Note

Os tipos de retorno de Currency, , e Object não são suportados pela PreserveSigAttribute classe quando ocorre interoperação de COM para código gerido e o código gerido é marcado com a PreserveSigAttribute classeGuid. Quando tentas usar um destes tipos de retorno com a PreserveSigAttribute turma nestas condições, é lançado um TypeLoadException a.

Construtores

Name Description
PreserveSigAttribute()

Inicializa uma nova instância da PreserveSigAttribute classe.

Propriedades

Name Description
TypeId

Quando implementado numa classe derivada, obtém um identificador único para esta Attribute.

(Herdado de Attribute)

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)

Aplica-se a

Ver também