Ich habe eine Instanz des Typs object
, von dem ich weiß, dass es ein Zeiger ist (kann leicht mit myobject.GetType().IsPointer
verifiziert werden). Ist es möglich, den Wert des Zeigers durch Reflexion zu erhalten?Zeigerwert über Reflexion holen
Code so weit:
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)
}
Nachtrag №1: Als das betreffende Objekt ist Werttyp -keine einen Referenz Typ-, ich nicht
GCHandle::FromIntPtr(IntPtr)
von
GCHandle::Target
gefolgt verwenden kann das erhalten Objekt Wert ...
FromIntPtr erwartet ein GC-Handle. Es kann überhaupt nicht mit Zeigern arbeiten. Einfach darauf hinweisen. – usr
'Ich kann seine Bytes erhalten mit:' Dies erhält nicht die Zeiger Bytes. Er erhält 4 oder 8 Bytes von der Speicherstelle, auf die obj zeigt. Was meinst du mit "der Zeiger Wert"? Es ist 'ptr'! – usr
@usr: In Bezug auf Ihren ersten Kommentar: Ich weiß das, das ist der Grund, warum ich sagte, dass es nicht funktionieren wird, denn es ist ein Werttyp. zu deinem zweiten Kommentar: Ich erhalte die Bytes des Wertes - nicht die des Pointers. – Unknown6656