2017-07-29 5 views

答えて

4

をタイプに依存しないポインタとしての固定されたオブジェクトのアドレス。たとえば、t彼:

IntPtr ptr = handle.AddrOfPinnedObject(); 

は、あなたが(それ以外の場合は、オブジェクトが永久に固定のままになります)、それのトラックを失う前に、明示的にハンドルを解放することを忘れないでください:私が仮定」と述べ

handle.Free(); 

お知らせそれは動作する " - すべてのオブジェクトを固定することはできませんし、固定できないオブジェクトは固定することを試みるときに例外をスローしません。

static unsafe void* VeryUnsafeGetAddress(this object obj) 
{ 
    return *(void**)Unsafe.AsPointer(ref obj); 
} 
:あなたは非固定オブジェクトのアドレスを取ってリスクしたい場合

、あなたはこのような何かを試みることSystem.Runtime.CompilerServices.Unsafeを使用することができます

1

...私は

GCHandle.Alloc(...); 

を使用してGCからオブジェクトを保護する必要があるが、私はポインタを定義する方法を見つけることができないことを知っていますMarshal.StructureToPtr。私はまた、このblog投稿を読むことをお勧めします。

3

GCHandle.Allocを使用して、第2パラメータGCHandleType.Pinnedで試してください。また、方法GCHandle.AddrOfPinnedObjectが役に立つかもしれません。

これら二つのリンク試してください:あなたが取ることができ、それが動作すると仮定すると、

GCHandle handle = GCHandle.Alloc(oldList, GCHandleType.Pinned); 

:あなたはこのようなインスタンスを固定することができます

関連する問題