По сути, я пытаюсь получить внутреннее поле через отражение внутреннего класса Unity DynamicBuffer
. Это поле имеет тип *BufferHeader
.
FieldInfo
работает, возвращает тип System.Reflection.Pointer
, но значение этого указателя полностью отличается от значения внутри DynamicBuffer
, по крайней мере, как сообщаетсямой отладчик (jetbrains Rider), как вы можете видеть на изображении ниже.
Это не просто сбитый с толку отладчик, так как разыменование указателя возвращает структуру со значениями мусора, заставляя меня поверить, что указатель возвращенПо некоторым причинам информация о полях действительно неверна.
public unsafe static void testfieldInfo(DynamicBuffer<T> buffer)
{
var testFieldInfo = buffer.GetType().GetField(
"m_Buffer",
BindingFlags.NonPublic | BindingFlags.Instance);
var test = testFieldInfo.GetValue(buffer);
Pointer rawPtr = (Pointer) testFieldInfo.GetValue(buffer);
BufferHeader* header = (BufferHeader*)Pointer.Unbox(rawPtr);
BufferHeader headCopy = *header;
Debug.Log($"pointer Val {new IntPtr(header->Pointer)} original: {new IntPtr((byte*)buffer.GetUnsafePtr())}");
}