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 に答える