PreserveSigAttribute Classe

Definizione

Indica che la trasformazione della firma HRESULT che viene eseguita durante le chiamate di interoperabilità COM deve essere eliminata.

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
Ereditarietà
PreserveSigAttribute
Attributi

Esempio

L'esempio seguente illustra come Tlbexp.exe converte un metodo C# senza PreserveSigAttribute quando si esporta un assembly in una libreria dei tipi COM.

Firma gestita:

int DoSomething (long l);

Firma non gestita:

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

Quando si applica PreserveSigAttribute allo stesso metodo C# ed esportare l'assembly, la conversione del metodo è diversa dall'esempio precedente. Si noti che Tlbexp.exe rimuove il parametro HRESULT e il modificatore di parametro [out, retval].

Firma gestita:

[PreserveSig] int DoSomething (long l);

Firma non gestita:

int DoSomething ([in] long l);

Commenti

È possibile applicare questo attributo ai metodi.

Per impostazione predefinita, il Tlbexp.exe (utilità di esportazione della libreria dei tipi) garantisce che una chiamata che restituisce un valore HRESULT di S_OK venga trasformata in modo che il parametro [out, retval] venga usato come valore restituito dalla funzione. L'S_OK HRESULT viene rimosso. Per gli HRESULT diversi da S_OK, il runtime genera un'eccezione e rimuove il parametro [out, retval]. Quando si applica a PreserveSigAttribute una firma del metodo gestito, le firme gestite e non gestite del metodo con attributi sono identiche.

Il mantenimento della firma del metodo originale è necessario se il membro restituisce più valori HRESULT riusciti e si desidera rilevare i diversi valori. Poiché la maggior parte dei membri COM restituisce un HRESULT, applicando PreserveSigAttribute, è possibile recuperare un numero intero che rappresenta l'esito positivo o negativo HRESULT. Tlbexp.exe mantiene tutti i parametri [out, retval] come parametri out nella firma gestita.

Il Tlbimp.exe (utilità di importazione della libreria dei tipi) applica anche questo attributo; applica l'attributo alle differenze quando importa una libreria dei tipi.

Note

I tipi restituiti di Currency, Guide Object non sono supportati dalla PreserveSigAttribute classe quando si verifica l'interoperabilità da COM a codice gestito e il codice gestito è contrassegnato con la PreserveSigAttribute classe . Quando si tenta di usare uno di questi tipi restituiti con la PreserveSigAttribute classe durante queste condizioni, viene generata un'eccezione TypeLoadException .

Costruttori

Nome Descrizione
PreserveSigAttribute()

Inizializza una nuova istanza della classe PreserveSigAttribute.

Proprietà

Nome Descrizione
TypeId

Se implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute.

(Ereditato da Attribute)

Metodi

Nome Descrizione
Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per questa istanza.

(Ereditato da Attribute)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

Quando sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di identificatori dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo per un oggetto, che può essere utilizzato per ottenere le informazioni sul tipo per un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero di interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso alle proprietà e ai metodi esposti da un oggetto .

(Ereditato da Attribute)

Si applica a

Vedi anche