FieldInfo.GetValue для типа указателя, не соответствующего сообщаемому отладчику значению - PullRequest
0 голосов
/ 05 октября 2019

По сути, я пытаюсь получить внутреннее поле через отражение внутреннего класса Unity DynamicBuffer. Это поле имеет тип *BufferHeader.

FieldInfo работает, возвращает тип System.Reflection.Pointer, но значение этого указателя полностью отличается от значения внутри DynamicBuffer, по крайней мере, как сообщаетсямой отладчик (jetbrains Rider), как вы можете видеть на изображении ниже.

Это не просто сбитый с толку отладчик, так как разыменование указателя возвращает структуру со значениями мусора, заставляя меня поверить, что указатель возвращенПо некоторым причинам информация о полях действительно неверна.

Here's a picture of the debugger.

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())}");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...