私はそれがポインタであることを知っているobject
のインスタンスを持っています。反射を介してポインタの値を取得することは可能ですか?反射によるポインタ値の取得
これまでコード:
object obj = .... ; // type and value unknown at compile time
Type t = obj.GetType();
if (t.IsPointer)
{
void* ptr = Pointer.Unbox(obj);
// I can obtain its (the object's) bytes with:
byte[] buffer = new byte[Marshal.SizeOf(t)];
Marshal.Copy((IntPtr)ptr, buffer, 0, buffer.Length);
// but how can I get the value represented by the byte array 'buffer'?
// or how can I get the value of *ptr?
// the following line obviously doesn't work:
object val = (object)*ptr; // error CS0242 (obviously)
}
補遺№1:問題のオブジェクトがタイプ - 基準-not値型 あるように、私は得ることが
GCHandle::Target
続いGCHandle::FromIntPtr(IntPtr)
を使用することはできませんオブジェクトの値...
FromIntPtrは、GCハンドルが必要です。ポインタではまったく動作しません。ただこれを指摘してください。 – usr
'私はそのバイトを得ることができます:'これはポインタバイトを取得しません。 objが指すメモリ位置から4バイトまたは8バイトを取得します。 "ポインタの値"はどういう意味ですか?それは 'ptr'です! – usr
@usr:あなたの最初のコメントについて:私はそれがうまくいかないと言った理由を知っています。あなたの2番目のコメントについて:私は、ポインタのものではなく、値のバイトを取得します。 – Unknown6656