我需要将一个 IntPtr 传递给 IStream.Read,并且 IntPtr 应该指向一个 ulong 变量。如何获得指向我的 ulong 变量的 IntPtr?
Ries
问问题
4476 次
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 回答