Marshal.FreeHGlobal(IntPtr) Marshal.FreeHGlobal(IntPtr) Marshal.FreeHGlobal(IntPtr) Marshal.FreeHGlobal(IntPtr) Method

Définition

Libère la mémoire précédemment allouée de la mémoire non managée du processus.Frees memory previously allocated from the unmanaged memory of the process.

public:
 static void FreeHGlobal(IntPtr hglobal);
[System.Security.SecurityCritical]
public static void FreeHGlobal (IntPtr hglobal);
static member FreeHGlobal : nativeint -> unit
Public Shared Sub FreeHGlobal (hglobal As IntPtr)

Paramètres

hglobal
IntPtr IntPtr IntPtr IntPtr

Handle retourné par l'appel correspondant d'origine à AllocHGlobal(IntPtr).The handle returned by the original matching call to AllocHGlobal(IntPtr).

Exemples

L'exemple suivant montre l'appel à la méthode FreeHGlobal.The following example demonstrates calling the FreeHGlobal method. Cet exemple de code fait partie d’un exemple plus complet fourni Marshal pour la classe.This code example is part of a larger example provided for the Marshal class.

// Demonstrate how to call GlobalAlloc and 
// GlobalFree using the Marshal class.
IntPtr hglobal = Marshal::AllocHGlobal(100);
Marshal::FreeHGlobal(hglobal);
// Demonstrate how to call GlobalAlloc and 
// GlobalFree using the Marshal class.
IntPtr hglobal = Marshal.AllocHGlobal(100);
Marshal.FreeHGlobal(hglobal);
' Demonstrate how to call GlobalAlloc and 
' GlobalFree using the Marshal class.
Dim hglobal As IntPtr = Marshal.AllocHGlobal(100)
Marshal.FreeHGlobal(hglobal)

L’exemple suivant montre comment convertir le contenu d’une classe managée String en mémoire non managée, puis supprimer la mémoire non managée lorsque vous avez terminé.The following example demonstrates how to convert the contents of a managed String class to unmanaged memory and then dispose of the unmanaged memory when done.

using namespace System;
using namespace System::Runtime::InteropServices;

#include <iostream>                                                 // for printf


int main()
{
    // Create a managed string.
    String^ managedString = "Hello unmanaged world (from the managed world).";

    // Marshal the managed string to unmanaged memory.
    char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();

    printf("stringPointer = %s\n", stringPointer);

    // Always free the unmanaged string.
    Marshal::FreeHGlobal(IntPtr(stringPointer));

    return 0;
}
using System;
using System.Runtime.InteropServices;

class MainFunction
{
    static void Main()
    {
    Console.WriteLine("\nStringToGlobalAnsi\n");

    // Create a managed string.
    String  managedString = "I am a managed String";
    Console.WriteLine("1) managedString = " + managedString );

    // Marshal the managed string to unmanaged memory.
    IntPtr stringPointer = (IntPtr)Marshal.StringToHGlobalAnsi(managedString);
    Console.WriteLine("2) stringPointer = {0}", stringPointer );

    // Get the string back from unmanaged memory
    String RetrievedString = Marshal.PtrToStringAnsi( stringPointer);
    Console.WriteLine("3) Retrieved from unmanaged memory = " + RetrievedString );

    // Always free the unmanaged string.
    Marshal.FreeHGlobal(stringPointer);

    // IntPtr handle value is still the same:
    Console.WriteLine("4) stringPointer = " + stringPointer );

    // However, it contains no data after being freed:
    String RetrievedString2 = Marshal.PtrToStringAnsi( stringPointer);
    Console.WriteLine("5) RetrievedString2 = " + RetrievedString2 );
    }
}

Remarques

Vous pouvez utiliser FreeHGlobal pour libérer toute mémoire à partir du tas global alloué AllocHGlobalpar ReAllocHGlobal, ou toute autre méthode d’API non managée équivalente.You can use FreeHGlobal to free any memory from the global heap allocated by AllocHGlobal, ReAllocHGlobal, or any equivalent unmanaged API method. Si le hglobal paramètre est IntPtr.Zero , la méthode ne fait rien.If the hglobal parameter is IntPtr.Zero the method does nothing.

FreeHGlobalexpose la fonction LocalFree à partir de Kernel32. dll, qui libère tous les octets afin que vous ne puissiez plus utiliser la mémoire vers hgloballaquelle pointe.FreeHGlobal exposes the LocalFree function from Kernel32.DLL, which frees all bytes so that you can no longer use the memory pointed to by hglobal.

En plus de FreeHGlobal, la Marshal classe fournit deux autres méthodes de l’API de désallocation DestroyStructure de FreeCoTaskMemmémoire : et.In addition to FreeHGlobal, the Marshal class provides two other memory-deallocation API methods: DestroyStructure and FreeCoTaskMem.

Sécurité

SecurityCriticalAttribute
Requiert une confiance totale pour l’appelant immédiat.requires full trust for the immediate caller. Ce membre ne peut pas être utilisé par du code de confiance partielle ou transparent.This member cannot be used by partially trusted or transparent code.

S’applique à

Voir aussi