私は構造体にアンマネージポインタを作成する方法を知っています。
しかし、私は、オブジェクトを指す管理されていないポインタを持っています。C#オブジェクトでアンマネージドポインタを取得するには?
私はすでに、私はあなたに興味を持っていると思う
私は構造体にアンマネージポインタを作成する方法を知っています。
しかし、私は、オブジェクトを指す管理されていないポインタを持っています。C#オブジェクトでアンマネージドポインタを取得するには?
私はすでに、私はあなたに興味を持っていると思う
をタイプに依存しないポインタとしての固定されたオブジェクトのアドレス。たとえば、t彼:
IntPtr ptr = handle.AddrOfPinnedObject();
は、あなたが(それ以外の場合は、オブジェクトが永久に固定のままになります)、それのトラックを失う前に、明示的にハンドルを解放することを忘れないでください:私が仮定」と述べ
handle.Free();
お知らせそれは動作する " - すべてのオブジェクトを固定することはできませんし、固定できないオブジェクトは固定することを試みるときに例外をスローしません。
static unsafe void* VeryUnsafeGetAddress(this object obj)
{
return *(void**)Unsafe.AsPointer(ref obj);
}
:あなたは非固定オブジェクトのアドレスを取ってリスクしたい場合
、あなたはこのような何かを試みることSystem.Runtime.CompilerServices.Unsafe
を使用することができます
...私は
GCHandle.Alloc(...);
を使用してGCからオブジェクトを保護する必要があるが、私はポインタを定義する方法を見つけることができないことを知っていますMarshal.StructureToPtr
。私はまた、このblog投稿を読むことをお勧めします。
GCHandle.Alloc
を使用して、第2パラメータGCHandleType.Pinned
で試してください。また、方法GCHandle.AddrOfPinnedObject
が役に立つかもしれません。
これら二つのリンク試してください:あなたが取ることができ、それが動作すると仮定すると、
GCHandle handle = GCHandle.Alloc(oldList, GCHandleType.Pinned);
:あなたはこのようなインスタンスを固定することができます