PreserveSigAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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
- 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) |