我想固定一个通用类型的数组并获得一个指向其内存的指针:
T[] arr = ...;
fixed (T* ptr = arr)
{
// Use ptr here.
}
Run Code Online (Sandbox Code Playgroud)
但是尝试编译上面的代码会产生这个编译错误:
Cannot take the address of, get the size of, or declare a pointer to a managed type
Run Code Online (Sandbox Code Playgroud)
这些 问题的答案证实,没有办法声明通用T*指针.但有没有办法固定通用T[]数组并获得IntPtr固定内存?(这样的指针仍然有用,因为它可以传递给本机代码或转换为已知类型的指针.)
是的,您可以使用该GCHandle对象固定一个通用T[]数组,并在固定时获取IntPtr到其内存:
T[] arr = ...;
GCHandle handle = GCHandle.Alloc(arr, GCHandleType.Pinned);
IntPtr ptr = handle.AddrOfPinnedObject();
// Use the ptr.
handle.Free();
Run Code Online (Sandbox Code Playgroud)
确保你记得打电话Free(),否则阵列将永远不会被取消固定.
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |