[英]How to get unmanaged pointer on an C# object?
我知道如何在struct上创建非托管指针。
但我希望有一个指向对象的非托管指针。
我已经知道我需要使用GC来保护对象
GCHandle.Alloc(...);
但我找不到定义指针的方法......
尝试使用GCHandle.Alloc
和第二个参数GCHandleType.Pinned
。 方法GCHandle.AddrOfPinnedObject
也可能有用。
试试这两个链接:
您可以固定这样的实例:
GCHandle handle = GCHandle.Alloc(oldList, GCHandleType.Pinned);
假设它有效,那么您可以将固定对象的地址作为类型不可知的指针,如下所示:
IntPtr ptr = handle.AddrOfPinnedObject();
不要忘记在失去跟踪之前显式释放句柄(否则对象将永久固定):
handle.Free();
请注意,我说“假设它有效” - 并非所有对象都可以固定,而那些不能在您尝试固定它们时会抛出异常。
如果您想冒险获取非固定对象的地址,可以使用System.Runtime.CompilerServices.Unsafe
尝试这样的操作:
static unsafe void* VeryUnsafeGetAddress(this object obj)
{
return *(void**)Unsafe.AsPointer(ref obj);
}
我想你对Marshal.StructureToPtr
感兴趣。 我也建议阅读这篇博文 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.