Delphi: разные PTypeInfo для одного типа
Я немного озадачен PTypeInfo (и TypeInfo в целом) в Delphi - Delphi 10 Seattle, если быть точным.
Я столкнулся со следующей проблемой:
У нас есть фреймворк ORM (основан на Spring4D). Теперь я хочу расширить возможности отображения: столбец целых чисел Nullable в поле Nullable в модели. Столбец содержит NULL, 0 или 1. Функция отображения тривиальна:
- NULL-> null (пусто Nullable)
- 0-> ложь
- 1-> правда
Но я считаю, что это не имеет значения, я работаю над ORM. Суть проблемы заключается в том, что для передачи значения используется TValue, и некоторые операции приведения выполняются до того, как окончательное значение будет присвоено полю объекта через RTTI. И там я вижу проблему, которую могу легко воспроизвести:
Механизм отображения предоставляет указатель PTypeInfo для поля. Пример:
class declaration
...
MyBooleanField : Nullable<Boolean>;
И где-то в коде:
LMyBooleanField.GetTypeInfo ... result is PTypeInfo to Nullable<System.Boolean>.
А теперь, если я напишу:
LMyBooleanField.GetTypeInfo = TypeInfo(Nullable<Boolean>)
результат Ложь. И мой главный вопрос - ПОЧЕМУ? Я уверен, что типы одинаковы. Они оба возвращаются 'Nullable<System.Boolean>'
как это имя
1 ответ
Я думаю, что вы как бы отвечаете на свой вопрос. Хотя TypeInfo и PTypeInfo являются указателями, это не одно и то же. PTypeInfo - указатель на местоположение, которое содержит указатель типа TypeInfo. Поэтому LMyBooleanField.GetTypeInfo возвращает указатель на поле, которое указывает на Nullable