GCHandle.Alloc メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定したオブジェクトにハンドルを割り当てます。
オーバーロード
Alloc(Object) |
指定したオブジェクトに Normal ハンドルを割り当てます。 |
Alloc(Object, GCHandleType) |
指定したオブジェクトに指定した型のハンドルを割り当てます。 |
Alloc(Object)
- ソース:
- GCHandle.cs
- ソース:
- GCHandle.cs
- ソース:
- GCHandle.cs
指定したオブジェクトに Normal ハンドルを割り当てます。
public:
static System::Runtime::InteropServices::GCHandle Alloc(System::Object ^ value);
[System.Security.SecurityCritical]
public static System.Runtime.InteropServices.GCHandle Alloc (object value);
public static System.Runtime.InteropServices.GCHandle Alloc (object? value);
public static System.Runtime.InteropServices.GCHandle Alloc (object value);
[<System.Security.SecurityCritical>]
static member Alloc : obj -> System.Runtime.InteropServices.GCHandle
static member Alloc : obj -> System.Runtime.InteropServices.GCHandle
Public Shared Function Alloc (value As Object) As GCHandle
パラメーター
戻り値
オブジェクトをガベージ コレクションから保護する新しい GCHandle。 GCHandle は、不要になったときに Free() で解放する必要があります。
- 属性
例
次の例は、 メソッドを App
使用して GCHandle.Alloc
マネージド オブジェクトへのハンドルを作成するクラスを示しています。これにより、マネージド オブジェクトが収集されなくなります。 メソッドの EnumWindows
呼び出しは、デリゲートとマネージド オブジェクト (どちらもマネージド型として宣言されていますが、表示されません) を渡し、ハンドルを に IntPtrキャストします。 アンマネージ関数は、コールバック関数のパラメーターとして型を呼び出し元に渡します。
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public delegate bool CallBack(int handle, IntPtr param);
internal static class NativeMethods
{
// passing managed object as LPARAM
// BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);
[DllImport("user32.dll")]
internal static extern bool EnumWindows(CallBack cb, IntPtr param);
}
public class App
{
public static void Main()
{
Run();
}
public static void Run()
{
TextWriter tw = Console.Out;
GCHandle gch = GCHandle.Alloc(tw);
CallBack cewp = new CallBack(CaptureEnumWindowsProc);
// platform invoke will prevent delegate to be garbage collected
// before call ends
NativeMethods.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;
}
}
Imports System.IO
Imports System.Threading
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports System.Security.Permissions
Public Delegate Function CallBack(ByVal handle As Integer, ByVal param As IntPtr) As Boolean
Friend Module NativeMethods
' passing managed object as LPARAM
' BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);
<DllImport("user32.dll")>
Friend Function EnumWindows(ByVal cb As CallBack, ByVal param As IntPtr) As Boolean
End Function
End Module
Module App
Sub Main()
Run()
End Sub
<SecurityPermission(SecurityAction.Demand, UnmanagedCode:=True)>
Sub Run()
Dim tw As TextWriter = Console.Out
Dim gch As GCHandle = GCHandle.Alloc(tw)
Dim cewp As CallBack
cewp = AddressOf CaptureEnumWindowsProc
' platform invoke will prevent delegate to be garbage collected
' before call ends
NativeMethods.EnumWindows(cewp, GCHandle.ToIntPtr(gch))
gch.Free()
End Sub
Function CaptureEnumWindowsProc(ByVal handle As Integer, ByVal param As IntPtr) As Boolean
Dim gch As GCHandle = GCHandle.FromIntPtr(param)
Dim tw As TextWriter = CType(gch.Target, TextWriter)
tw.WriteLine(handle)
Return True
End Function
End Module
注釈
Normal ハンドルは不透明です。つまり、ハンドルを介して含まれるオブジェクトのアドレスを解決することはできません。
こちらもご覧ください
適用対象
Alloc(Object, GCHandleType)
- ソース:
- GCHandle.cs
- ソース:
- GCHandle.cs
- ソース:
- GCHandle.cs
指定したオブジェクトに指定した型のハンドルを割り当てます。
public:
static System::Runtime::InteropServices::GCHandle Alloc(System::Object ^ value, System::Runtime::InteropServices::GCHandleType type);
[System.Security.SecurityCritical]
public static System.Runtime.InteropServices.GCHandle Alloc (object value, System.Runtime.InteropServices.GCHandleType type);
public static System.Runtime.InteropServices.GCHandle Alloc (object? value, System.Runtime.InteropServices.GCHandleType type);
public static System.Runtime.InteropServices.GCHandle Alloc (object value, System.Runtime.InteropServices.GCHandleType type);
[<System.Security.SecurityCritical>]
static member Alloc : obj * System.Runtime.InteropServices.GCHandleType -> System.Runtime.InteropServices.GCHandle
static member Alloc : obj * System.Runtime.InteropServices.GCHandleType -> System.Runtime.InteropServices.GCHandle
Public Shared Function Alloc (value As Object, type As GCHandleType) As GCHandle
パラメーター
- type
- GCHandleType
作成する GCHandleType の型を示す、GCHandle 値の 1 つ。
戻り値
指定した型の新しい GCHandle。 GCHandle は、不要になったときに Free() で解放する必要があります。
- 属性
例外
非プリミティブ (blittable でない) メンバーを持つインスタンスは固定できません。
こちらもご覧ください
適用対象
.NET