PreserveSigAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
- 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 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 da 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 o PreserveSigAttribute a 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 será 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; ele aplica o atributo a dispinterfaces quando importa uma biblioteca de tipos.
Observação
Tipos de retorno de Currency, Guide Object não têm suporte da 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) |