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, а не на сам Nullable.

Другие вопросы по тегам