#unity/日常积累 `GCHandle.ToIntPtr` 方法在 C# 中用于获取一个表示 `GCHandle` 实例的 `IntPtr`。这个 `IntPtr` 可以被传递给需要对象指针的非托管代码。当你使用 `GCHandle.Alloc` 方法分配了一个句柄,并且想要将这个句柄传递给非托管代码时,`ToIntPtr` 方法就显得非常有用。 以下是一个使用 `GCHandle.ToIntPtr` 方法的示例: ``` cs 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]]]使用 ![[Pasted image 20241025144012.png]]