Я пишу элемент управления, который должен иметь возможность отображать любой список данных. То, что я хотел сделать, заключалось в том, чтобы имитировать конструкцию for-in, в которой я проверяю публичную функцию GetEnumerator, которая содержит свойство Current и метод MoveNext.Как вызвать GetEnumerator на произвольном типе?
Я определил следующее:
- я могу проверить существования метода простого вызова MethodAddress на моем объекте. Если я получаю адрес, метод существует.
- Я могу использовать RTTI для проверки типа возвращаемого метода.
- Я могу использовать RTTI, чтобы проверить свойство и прочитать его.
Промежуток, хотя, я пропускаю маленькие кусочки информации:
- Как вызвать метод, учитывая его адрес? Могу ли я просто написать определение (например, для импорта), указать адрес и назвать его?
- Проверка возвращаемого типа метода требует вызова GetTypeData с его PTypeInfo. Я получаю PTypeInfo, вызывая TypeInfo для типа. Итак, как мне получить PTypeInfo для данного метода, учитывая только его адрес?
Я не совсем понял, чего вы пытаетесь достичь. В вашем элементе управления отображаются данные, но куда идет перечислитель? – jpfollenius
И почему бы вам просто не убедиться, что все данные, переданные вашему элементу управления, реализуют IEnumerable? Вам нужна дополнительная функциональность в вашем счетчике? Что это? – jpfollenius
Планируется перечислить элементы в списке. Кроме того, я в основном буду использовать это в сочетании с большим количеством существующего кода, большинство из которых реализует GetEnumerator для включения поддержки in-in, но ни один из них не реализует IEnumerable (который не нужен или не используется встроенной конструкцией Delphi). –