【发布时间】:2018-06-14 03:44:04
【问题描述】:
我有一个 void* 指向堆上的某个托管对象。
如何将 void* 值转换为 object(指向同一事物,而不是副本)?
请注意,这不是 C# - How To Convert Object To IntPtr And Back? 的副本,因为我没有可以转换回 GCHandle 的 GCHandle.ToIntPtr 的输出——我有一个对象的实际地址。
【问题讨论】:
-
@P.Knowledge
GCHandle.FromIntPtr是否采用堆指针?文档说“托管对象的 IntPtr 句柄”——不确定 IntPtr“句柄”是什么意思——只是一个直接指针? -
@P.Knowledge 嗯,似乎不是这样:stackoverflow.com/a/17332274/39068。
-
嗯,正如你所说,你有一个
void*指针,对吧? .NET 支持多种使用指针的方式,如IntPtr,其中包含原始指针,在托管环境中进行处理,GCHandle是一种用于处理非托管内存的结构,包括指针。