Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
0 sur 1 ont trouvé cela utile - Évaluez ce sujet

GCHandle, structure

Fournit un moyen d'accéder à un objet managé à partir d'une mémoire non managée.

Espace de noms :  System.Runtime.InteropServices
Assembly :  mscorlib (dans mscorlib.dll)
[ComVisibleAttribute(true)]
public struct GCHandle

Le type GCHandle expose les membres suivants.

  NomDescription
Propriété publiquePris en charge par XNA FrameworkIsAllocatedObtient une valeur indiquant si le handle est alloué.
Propriété publiquePris en charge par XNA FrameworkTargetObtient ou définit l'objet représenté par le handle.
Début
  NomDescription
Méthode publiquePris en charge par XNA FrameworkAddrOfPinnedObjectRécupère l'adresse d'un objet dans un handle Pinned.
Méthode publiqueMembre statiquePris en charge par XNA FrameworkAlloc(Object)Alloue un handle Normal pour l'objet spécifié.
Méthode publiqueMembre statiquePris en charge par XNA FrameworkAlloc(Object, GCHandleType)Alloue un handle du type spécifié pour l'objet spécifié.
Méthode publiquePris en charge par XNA FrameworkEqualsDétermine si l'objet GCHandle spécifié est identique à l'objet GCHandle en cours. (Substitue ValueType.Equals(Object).)

Dans XNA Framework, ce membre est substitué par Equals(Object).
Méthode protégéePris en charge par XNA FrameworkFinalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publiquePris en charge par XNA FrameworkFreeLibère un GCHandle.
Méthode publiqueMembre statiqueFromIntPtrRetourne un nouvel objet GCHandle créé à partir d'un handle d'objet managé.
Méthode publiquePris en charge par XNA FrameworkGetHashCodeRetourne un identificateur pour l'objet GCHandle actuel. (Substitue ValueType.GetHashCode().)

Dans XNA Framework, ce membre est substitué par GetHashCode().
Méthode publiquePris en charge par XNA FrameworkGetTypeObtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode protégéePris en charge par XNA FrameworkMemberwiseCloneCrée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode publiqueMembre statiqueToIntPtrRetourne la représentation interne sous forme d'entier d'un objet GCHandle.
Méthode publiquePris en charge par XNA FrameworkToStringRetourne le nom de type qualifié complet de cette instance. (Hérité de ValueType.)

Dans XNA Framework 3.0, ce membre est hérité de Object.ToString().
Début
  NomDescription
Opérateur publicMembre statiqueEqualityRetourne une valeur indiquant si deux objets GCHandle sont égaux.
Opérateur publicMembre statiquePris en charge par XNA FrameworkExplicit(GCHandle to IntPtr) GCHandle est stocké en utilisant une représentation sous forme d'entier interne.
Opérateur publicMembre statiquePris en charge par XNA FrameworkExplicit(IntPtr to GCHandle) GCHandle est stocké en utilisant une représentation sous forme d'entier interne.
Opérateur publicMembre statiqueInequalityRetourne une valeur indiquant si deux objets GCHandle sont égaux.
Début

La classe GCHandle est utilisée avec l'énumération GCHandleType pour créer un handle correspondant à n'importe quel objet managé. Il existe quatre types possibles pour ce handle : Weak, WeakTrackResurrection, Normal ou Pinned. Lorsque le handle a été affecté, vous pouvez l'utiliser pour empêcher l'objet managé d'être récupéré par le garbage collector lorsqu'un client non managé détient la seule référence. Sans un tel handle, l'objet peut être récupéré par le garbage collector avant d'avoir terminé l'action qu'il est en train d'accomplir pour le client non managé.

Vous pouvez également utiliser GCHandle pour créer un objet épinglé qui retourne une adresse mémoire et empêche le garbage collector de placer l'objet en mémoire.

Lorsque le handle est hors de portée, vous devez le libérer explicitement en appelant la méthode Free ; sinon, des fuites de mémoire peuvent se produire. Lorsque vous libérez un handle épinglé, l'objet associé est désépinglé et devient disponible pour le garbage collection s'il n'y a pas d'autres références à celui-ci.

Dans l'exemple suivant, une classe App crée un handle vers un objet managé à l'aide de la méthode GCHandle.Alloc, évitant ainsi à l'objet managé d'être collecté. Un appel à la méthode EnumWindows permet de passer un délégué et un objet managé (tous deux déclarés comme types managés, mais non affichés) et d'effectuer un cast du handle en type IntPtr. La fonction non managée repasse le type à l'appelant sous la forme d'un paramètre de la fonction de rappel.


using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Security.Permissions;

public delegate bool CallBack(int handle, IntPtr param);

public class LibWrap
{
	// passing managed object as LPARAM
	// BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);

	[DllImport("user32.dll")]
	public static extern bool EnumWindows(CallBack cb, IntPtr param);
}

public class App
{
	public static void Main()
	{
		Run();
	}

        [SecurityPermission(SecurityAction.Demand, UnmanagedCode=true)]
	public static void Run()
        {
		TextWriter tw = System.Console.Out;
		GCHandle gch = GCHandle.Alloc(tw);

		CallBack cewp = new CallBack(CaptureEnumWindowsProc);

		// platform invoke will prevent delegate to be garbage collected
		// before call ends

		LibWrap.EnumWindows(cewp, GCHandle.ToIntPtr(gch));
		gch.Free();
        }

	private static bool CaptureEnumWindowsProc(int handle, IntPtr param)
	{
		GCHandle gch = GCHandle.FromIntPtr(param);
		TextWriter tw = (TextWriter)gch.Target;
		tw.WriteLine(handle);
		return true;
	}
}


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)

Ajouts de la communauté

AJOUTER
© 2013 Microsoft. Tous droits réservés.