HandleRef Structure

Définition

Inclut dans un wrapper un objet managé contenant un handle vers une ressource transmise au code non managé à l’aide de l’appel de code non managé.Wraps a managed object holding a handle to a resource that is passed to unmanaged code using platform invoke.

public value class HandleRef
[System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
type HandleRef = struct
Public Structure HandleRef
Héritage
HandleRef
Attributs

Remarques

Important

À partir de la .NET Framework 2,0, les fonctionnalités de HandleRef la classe ont été remplacées SafeHandle par la classe et ses classes dérivées, ainsi que CriticalHandle par la classe.Starting with the .NET Framework 2.0, the functionality of the HandleRef class has been replaced by the SafeHandle class and its derived classes, as well as by the CriticalHandle class.

Si vous utilisez l’appel de code non managé pour appeler un objet managé et que l’objet n’est pas référencé ailleurs après l’appel de code non managé, il est possible pour le garbage collector de finaliser l’objet managé.If you use platform invoke to call a managed object, and the object is not referenced elsewhere after the platform invoke call, it is possible for the garbage collector to finalize the managed object. Cette action libère la ressource et invalide le descripteur, provoquant l’échec de l’appel de code non managé.This action releases the resource and invalidates the handle, causing the platform invoke call to fail. L’encapsulation d' HandleRef un handle avec garantit que l’objet managé n’est pas récupéré par le garbage collector tant que l’appel de code non managé n’est pas terminé.Wrapping a handle with HandleRef guarantees that the managed object is not garbage collected until the platform invoke call completes. Pour obtenir une description des services d’appel de code non managé, consultez consommation de fonctions DLL non managées.For a description of platform invoke services, see Consuming Unmanaged DLL Functions.

Le HandleRef type valeur, par GCHandleexemple, est un type spécial reconnu par le marshaleur d’interopérabilité.The HandleRef value type, like GCHandle, is a special type recognized by the interop marshaler. Un normal, non épinglé GCHandle , empêche également le garbage collection inopportun, HandleRef tout en offrant de meilleures performances.A normal, nonpinned GCHandle also prevents untimely garbage collection, yet HandleRef provides better performance. Bien que HandleRef l’utilisation de pour conserver un objet actif pendant la durée d’un appel de code non managé est préférable, GC.KeepAlive vous pouvez également utiliser la méthode dans le même but.Although using HandleRef to keep an object alive for the duration of a platform invoke call is preferred, you can also use the GC.KeepAlive method for the same purpose.

Le HandleRef constructeur prend deux paramètres: un Object représentant le wrapper et un IntPtr représentant le handle non managé.The HandleRef constructor takes two parameters: an Object representing the wrapper, and an IntPtr representing the unmanaged handle. Le marshaleur d’interopérabilité passe uniquement le handle au code non managé et garantit que le wrapper (passé comme premier paramètre au constructeur de HandleRef) reste actif pendant la durée de l’appel.The interop marshaler passes only the handle to unmanaged code, and guarantees that the wrapper (passed as the first parameter to the constructor of the HandleRef) remains alive for the duration of the call.

Constructeurs

HandleRef(Object, IntPtr)

Initialise une nouvelle instance de la classe HandleRef avec l'objet à encapsuler et un handle vers la ressource utilisée par le code non managé.Initializes a new instance of the HandleRef class with the object to wrap and a handle to the resource used by unmanaged code.

Propriétés

Handle

Obtient le handle vers une ressource.Gets the handle to a resource.

Wrapper

Obtient l'objet contenant le handle vers une ressource.Gets the object holding the handle to a resource.

Méthodes

ToIntPtr(HandleRef)

Retourne la représentation interne sous forme d'entier d'un objet HandleRef.Returns the internal integer representation of a HandleRef object.

Opérateurs

Explicit(HandleRef to IntPtr)

Retourne le handle vers une ressource de l'objet HandleRef spécifié.Returns the handle to a resource of the specified HandleRef object.

S’applique à

Voir aussi