Método Marshal.FreeHGlobal (IntPtr)
Publicado: octubre de 2016
Libera memoria previamente asignada de la memoria no administrada del proceso.
Espacio de nombres: System.Runtime.InteropServices
Ensamblado: mscorlib (en mscorlib.dll)
Sintaxis
[SecurityCriticalAttribute]
public static void FreeHGlobal(
IntPtr hglobal
)
public:
[SecurityCriticalAttribute]
static void FreeHGlobal(
IntPtr hglobal
)
[<SecurityCriticalAttribute>]
static member FreeHGlobal :
hglobal:nativeint -> unit
<SecurityCriticalAttribute>
Public Shared Sub FreeHGlobal (
hglobal As IntPtr
)
Parámetros
hglobal
Type: System.IntPtrControlador devuelto por la llamada coincidente original a AllocHGlobal.
Comentarios
Puede usar FreeHGlobal para liberar memoria del montón global asignada por AllocHGlobal, ReAllocHGlobal, o método de API no administrada de ningún comando equivalente. Si el hglobal parámetro es IntPtr.Zero el método no hace nada.
FreeHGlobal expone la LocalFree función de Kernel32.DLL, que libera todos los bytes, por lo que ya no se puede utilizar la memoria señalada por hglobal.
Además FreeHGlobal, la Marshal clase proporciona métodos de la API de dos otra desasignación de memoria: DestroyStructure y FreeCoTaskMem.
Win95Win98Win98SeWinMe
Passing an invalid handle value to M:System.Runtime.InteropServices.Marshal.FreeHGlobal(System.IntPtr) causes an T:System.ArgumentException.
Ejemplos
En el ejemplo siguiente se muestra la forma de llamar al método FreeHGlobal. Este ejemplo de código forma parte de un ejemplo mayor proporcionado para el Marshal clase.
// 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)
// Demonstrate how to call GlobalAlloc and
// GlobalFree using the Marshal class.
IntPtr hglobal = Marshal::AllocHGlobal(100);
Marshal::FreeHGlobal(hglobal);
En el ejemplo siguiente se muestra cómo convertir el contenido de una clase administrada String clase memoria no administrada y, a continuación, desechar la memoria no administrada cuando haya terminado.
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 );
}
}
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;
}
Seguridad
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.
Información de versión
Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Ver también
AllocHGlobal
ReAllocHGlobal
Clase Marshal
Espacio de nombres System.Runtime.InteropServices
Volver al principio