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

Definition

Gibt Speicherplatz frei, der zuvor aus dem nicht verwalteten Speicher des Prozesses belegt wurde.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)

Parameter

hglobal
IntPtr IntPtr IntPtr IntPtr

Das Handle, das beim ursprünglichen übereinstimmenden Aufruf von AllocHGlobal(IntPtr) zurückgegeben wurde.The handle returned by the original matching call to AllocHGlobal(IntPtr).

Beispiele

Im folgenden Beispiel wird das Aufrufen der FreeHGlobal-Methode veranschaulicht.The following example demonstrates calling the FreeHGlobal method. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die Marshal -Klasse bereitgestellt wird.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)

Im folgenden Beispiel wird veranschaulicht, wie Sie den Inhalt einer verwalteten String Klasse in den nicht verwalteten Speicher konvertieren und anschließend den nicht verwalteten Arbeitsspeicher verwerfen.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 );
    }
}

Hinweise

Sie können verwenden FreeHGlobal , um Arbeitsspeicher aus dem globalen Heap freizugeben AllocHGlobal, ReAllocHGlobalder von, oder einer beliebigen entsprechenden nicht verwalteten API-Methode zugeordnet wird.You can use FreeHGlobal to free any memory from the global heap allocated by AllocHGlobal, ReAllocHGlobal, or any equivalent unmanaged API method. Wenn der hglobal -Parameter IntPtr.Zero ist, führt die-Methode keine Aktion aus.If the hglobal parameter is IntPtr.Zero the method does nothing.

FreeHGlobalmacht die LocalFree -Funktion aus Kernel32. dll verfügbar, die alle Bytes freigibt, sodass Sie den Speicher, auf den von hglobalgezeigt wird, nicht mehr verwenden können.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.

FreeHGlobalZusätzlich zu bietet die- Marshal Klasse zwei weitere API-Methoden zur Speicher Aufhebung der Zuordnung DestroyStructure : FreeCoTaskMemund.In addition to FreeHGlobal, the Marshal class provides two other memory-deallocation API methods: DestroyStructure and FreeCoTaskMem.

Sicherheit

SecurityCriticalAttribute
Erfordert volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer.requires full trust for the immediate caller. Dieser Member kann nicht von teilweise vertrauenswürdigem oder transparentem Code verwendet werden.This member cannot be used by partially trusted or transparent code.

Gilt für:

Siehe auch