获取一个IntPtr一个ULONG变量在C#
题
我需要通过一个IntPtr到IStream.Read,并且IntPtr的应指向ULONG变量。我如何得到这个IntPtr的指向我的ULONG变量?
解决方案
,最好的方法是改变的IStream定义:
void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
int cb, /*IntPtr*/ ref int pcbRead);
然后可以写
int pcbRead = 0;
Read(..., ref pcbRead);
其他提示
我相信你,如果你想避免不安全的代码使用的GCHandle方法。我不知道这是如何工作与装箱的值类型。
var handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
var ptr = handle.AddrOfPinnedObject()
如果您不能使用不安全的代码尝试以下。
var myValue = GetTheValue();
var ptr = Marshal.AllocHGLobal(Marshal.SizeOf(typeof(ulong));
Marshal.StructureToPointer(ptr, myValue, false);
在某一点后,你将需要调用Marshal.FreeHGlobal的“PTR”值。
var pointer = new IntPtr(&myVariable);
不隶属于 StackOverflow