Пример #1
0
        public override ClrType GetRuntimeType(ulong obj)
        {
            if (!IsRuntimeType)
            {
                return(null);
            }

            ClrInstanceField field = GetFieldByName("m_handle");

            if (field == null)
            {
                return(null);
            }

            ulong methodTable = 0;

            if (field.ElementType == ClrElementType.NativeInt)
            {
                methodTable = (ulong)(long)field.GetValue(obj);
            }
            else if (field.ElementType == ClrElementType.Struct)
            {
                ClrInstanceField ptrField = field.Type.GetFieldByName("m_ptr");
                methodTable = (ulong)(long)ptrField.GetValue(field.GetAddress(obj, false), true);
            }

            return(DesktopHeap.GetTypeByMethodTable(methodTable, 0, obj));
        }