我可以在 C# 中将 IntPtr 的值转换为另一个没有不安全的 IntPtr 吗?
Can I convert a value of IntPtr to another IntPtr without unsafe in C#?
假设我有一个 IntPtr,它是从本机代码获取的 void**。当我打算将它推崇为 void* 等价 IntPtr 时,我使用了这样的代码:
unsafe
{
var innerPtr = (IntPtr)outerPtr.ToPointer();
}
为此,我需要启用 unsafe
代码。我想知道是否有另一种方法可以将这种指针 without 转换为不安全?
更新:
抱歉,我的问题无效。 (IntPtr)outerPtr.ToPointer()
的用法没有意义。
(IntPtr)outerPtr.ToPointer()
实际上没有做任何有用的事情,结果仍然包含相同的地址。
如果您想要将 void**
取消引用到 void*
的等价物,您可以使用 Marshal.ReadIntPtr(IntPtr address)
.
假设我有一个 IntPtr,它是从本机代码获取的 void**。当我打算将它推崇为 void* 等价 IntPtr 时,我使用了这样的代码:
unsafe
{
var innerPtr = (IntPtr)outerPtr.ToPointer();
}
为此,我需要启用 unsafe
代码。我想知道是否有另一种方法可以将这种指针 without 转换为不安全?
更新:
抱歉,我的问题无效。 (IntPtr)outerPtr.ToPointer()
的用法没有意义。
(IntPtr)outerPtr.ToPointer()
实际上没有做任何有用的事情,结果仍然包含相同的地址。
如果您想要将 void**
取消引用到 void*
的等价物,您可以使用 Marshal.ReadIntPtr(IntPtr address)
.