PreserveSigAttribute Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Indique que la transformation de signature HRESULT qui a lieu pendant les appels d’interopérabilité COM doit être supprimée.
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
- Héritage
- Attributs
Exemples
L’exemple suivant montre comment Tlbexp.exe convertit une méthode C# sans PreserveSigAttribute lors de l’exportation d’un assembly vers une bibliothèque de type COM.
Signature managée :
int DoSomething (long l);
Signature non managée :
HRESULT DoSomething ([in] long l, [out, retval] int * i);
Lorsque vous appliquez PreserveSigAttribute à la même méthode C# et exportez l’assembly, la conversion de méthode diffère de l’exemple précédent. Notez que Tlbexp.exe supprime le modificateur de paramètre HRESULT et le modificateur de paramètre [out, retval].
Signature managée :
[PreserveSig] int DoSomething (long l);
Signature non managée :
int DoSomething ([in] long l);
Remarques
Vous pouvez appliquer cet attribut aux méthodes.
Par défaut, le Tlbexp.exe (exportateur de bibliothèque de types) garantit qu’un appel qui retourne un HRESULT de S_OK est transformé de telle sorte que le paramètre [out, retval] soit utilisé comme valeur de retour de fonction. Le S_OK HRESULT est ignoré. Pour les HRESULT autres que S_OK, le runtime lève une exception et ignore le paramètre [out, retval]. Lorsque vous appliquez le PreserveSigAttribute à une signature de méthode managée, les signatures managées et non managées de la méthode attributée sont identiques.
La conservation de la signature de méthode d’origine est nécessaire si le membre retourne plusieurs valeurs HRESULT de réussite et que vous souhaitez détecter les différentes valeurs. Étant donné que la plupart des membres COM retournent un HRESULT, en appliquant , PreserveSigAttributevous pouvez récupérer un entier représentant la réussite ou l’échec HRESULT. Tlbexp.exe conserve tous les paramètres [out, retval] en tant que paramètres out dans la signature managée.
Le Tlbimp.exe (importateur de bibliothèque de types) applique également cet attribut ; il applique l’attribut à dispinterfaces lorsqu’il importe une bibliothèque de types.
Notes
Les types de retour de Currency, Guidet Object ne sont pas pris en charge par la classe lorsque l’interopérabilité PreserveSigAttribute se produit de COM vers le code managé et que le code managé est marqué avec la PreserveSigAttribute classe . Lorsque vous tentez d’utiliser l’un de ces types de retour avec la PreserveSigAttribute classe pendant ces conditions, un TypeLoadException est levée.
Constructeurs
PreserveSigAttribute() |
Initialise une nouvelle instance de la classe PreserveSigAttribute. |
Propriétés
TypeId |
Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute. (Hérité de Attribute) |
Méthodes
Equals(Object) |
Retourne une valeur qui indique si cette instance est égale à un objet spécifié. (Hérité de Attribute) |
GetHashCode() |
Retourne le code de hachage de cette instance. (Hérité de Attribute) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
IsDefaultAttribute() |
En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée. (Hérité de Attribute) |
Match(Object) |
En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |
Implémentations d’interfaces explicites
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface. (Hérité de Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). (Hérité de Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Fournit l'accès aux propriétés et aux méthodes exposées par un objet. (Hérité de Attribute) |