この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Marshal.FreeHGlobal メソッド (IntPtr)

 

公開日: 2016年10月

以前にプロセスのアンマネージ メモリから割り当てられたメモリを解放します。

名前空間:   System.Runtime.InteropServices
アセンブリ:  mscorlib (mscorlib.dll 内)

[SecurityCriticalAttribute]
public static void FreeHGlobal(
	IntPtr hglobal
)

パラメーター

hglobal
Type: System.IntPtr

元の一致する呼び出しから返されたハンドル AllocHGlobalします。

使用することができます FreeHGlobal によって割り当てられたグローバル ヒープからメモリを解放する AllocHGlobal, 、ReAllocHGlobal, 、または、それと同等のアンマネージ API のメソッドです。 場合、 hglobal パラメーターは IntPtr.Zero 何も実行します。

FreeHGlobal 公開する、 LocalFree 関数を不要になったメモリを使用できるように、すべてのバイトを解放 Kernel32.DLL から指す hglobalします。

他に、 FreeHGlobal, 、 Marshal クラスには他の 2 つのメモリの解放 API メソッド: DestroyStructureFreeCoTaskMemです。

Win95Win98Win98SeWinMe

Passing an invalid handle value to M:System.Runtime.InteropServices.Marshal.FreeHGlobal(System.IntPtr) causes an T:System.ArgumentException.

次の例では、FreeHGlobal メソッドを呼び出す方法を示しています。 このコード例が示されている例の一部は、 Marshal クラスです。

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

次の例では、マネージの内容を変換 String クラスのアンマネージ メモリにし、完了時に、アンマネージ メモリの破棄します。

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 );
    }
}

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Windows Phone Silverlight
8.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: