PreserveSigAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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) |