C#でULONG変数にのIntPtrを取得
質問
私はIStream.ReadへのIntPtrを渡す必要がある、とのIntPtrはULONG変数を指している必要があります。どのように私は私のULONG変数を指し、こののIntPtrを得るのですか?
解決
最良の方法は、IStreamの定義を変更することがあります:
void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
int cb, /*IntPtr*/ ref int pcbRead);
そして、あなたが書くことができます。
int pcbRead = 0;
Read(..., ref pcbRead);
他のヒント
私はあなたが危険なコードを避けたい場合はGCHandleメソッドを使用する必要が信じています。私は、これはboxed値型でどのように機能するかについて確認していない。
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);
後にいくつかの時点で、あなたは「PTR」値にMarshal.FreeHGlobalを呼び出す必要があります。
var pointer = new IntPtr(&myVariable);
所属していません StackOverflow