0

我需要将一个 IntPtr 传递给 IStream.Read,并且 IntPtr 应该指向一个 ulong 变量。如何获得指向我的 ulong 变量的 IntPtr?

4

4 回答 4

2

如果你想避免不安全的代码,我相信你必须使用 GCHandle 方法。我不确定这如何与盒装值类型一起使用。

var handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
var ptr = handle.AddrOfPinnedObject()
于 2009-03-27T14:31:04.523 回答
2

最好的方法是更改​​ IStream 定义:

void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
          int cb, /*IntPtr*/ ref int pcbRead);

然后你可以写

int pcbRead = 0;
Read(..., ref pcbRead);
于 2009-03-27T14:32:35.533 回答
1

如果您不能使用不安全的代码,请尝试以下操作。

var myValue = GetTheValue();
var ptr = Marshal.AllocHGLobal(Marshal.SizeOf(typeof(ulong));
Marshal.StructureToPointer(ptr, myValue, false);

稍后,您将需要在“ptr”值上调用 Marshal.FreeHGlobal。

于 2009-03-27T14:32:01.463 回答
0
var pointer = new IntPtr(&myVariable);
于 2009-03-27T14:28:21.520 回答