1.6 KiB
1.6 KiB
#unity/日常积累
GCHandle.ToIntPtr
方法在 C# 中用于获取一个表示 GCHandle
实例的 IntPtr
。这个 IntPtr
可以被传递给需要对象指针的非托管代码。当你使用 GCHandle.Alloc
方法分配了一个句柄,并且想要将这个句柄传递给非托管代码时,ToIntPtr
方法就显得非常有用。
以下是一个使用 GCHandle.ToIntPtr
方法的示例:
using System;
using System.Runtime.InteropServices;
class Program
{
// 假设这是一个非托管方法,它需要一个对象的指针
[DllImport("SomeUnmanagedLibrary.dll")]
private static extern void UnmanagedMethod(IntPtr objPtr);
static void Main()
{
object obj = new object();
GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned);
try
{
// 获取表示 GCHandle 的 IntPtr,并将其传递给非托管方法
IntPtr objPtr = handle.ToIntPtr();
UnmanagedMethod(objPtr);
}
finally
{
// 确保在使用完 handle 后释放它
handle.Free();
}
}
}
在这个示例中,我们首先分配了一个固定(pinned)的 GCHandle
,然后使用 ToIntPtr
方法获取了一个表示这个句柄的 IntPtr
。接着,我们将这个 IntPtr
传递给了一个非托管方法。最后,在 finally
块中,我们释放了句柄以避免内存泄漏。
其中一个用法,是跨语言和平台交互,例如要把一个方法,传递给objectc,可以配合GCHandle.Alloc]使用