【发布时间】:2019-03-07 08:37:39
【问题描述】:
假设我有一个 IntPtr,它是从本机代码获取的 void**。当我打算将它遵从 void* 等价 IntPtr 时,我使用了这样的代码:
unsafe
{
var innerPtr = (IntPtr)outerPtr.ToPointer();
}
为此,我需要启用unsafe 代码。我想知道是否有另一种方法可以转换这种指针没有不安全?
更新:
对不起,我的问题无效。 (IntPtr)outerPtr.ToPointer() 的用法没有意义。
【问题讨论】:
-
IntPtr不知道它指向什么——它只是封装了一个内存地址。所以你可以只做var innerPtr = outerPtr;(微软应该把这种类型称为MemoryAddress这样更清楚。) -
我想要的是取消引用外部指针,而不仅仅是分配给另一个。
-
如何取消引用
void*?这根本没有意义。如果您知道要引用它的类型,则只能取消引用指针...并且没有具体的void类型。它指向的实际类型是什么? -
感谢 cmets。我想我在这一点上有一些误解。
-
如果你解释了你想要结束的东西(根据具体类型,或者可能只是传递一个指向方法的指针),那么也许我们可以帮助消除任何误解。