GCHandle.Alloc 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 개체의 핸들을 할당합니다.
오버로드
Alloc(Object) |
지정된 개체의 Normal 핸들을 할당합니다. |
Alloc(Object, GCHandleType) |
지정된 개체에 특정 형식의 핸들을 할당합니다. |
Alloc(Object)
- Source:
- GCHandle.cs
- Source:
- GCHandle.cs
- Source:
- 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)
- Source:
- GCHandle.cs
- Source:
- GCHandle.cs
- Source:
- 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 값 중 하나입니다.
반환
지정한 형식의 새 GCHandle입니다. 이 GCHandle은 더 이상 필요하지 않을 때 Free()를 사용하여 해제해야 합니다.
- 특성
예외
기본 형식이 아닌(blittable이 아닌) 멤버가 있는 인스턴스를 고정시킬 수 없는 경우
추가 정보
적용 대상
.NET