![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RTTI [D6, WinXP]
DK © (2004-08-17 10:42:00)Задача не для слабонервных:-( В переменной string храниться имя класа порожденного от TPersistent. Необходимо креировать экземпляр этого класса. Зная только его имя. Может кто знает, как
это реализовать без RegisterClass. Спасибо!!!
Анонимщик (2004-08-17 12:33:00) [1]Вот именно, в EXE. Вот и или разбмрайся с форматом PE-файла (и в исходниках forms.pas), или говори, что за задача - получишь не такой лобовой, но более подходящий путь.
DK (2004-08-17 12:29:00) [2]Спасибо за ответы! Я уже убедился, что без RegisterClass и GetClass не обойтись. А привязываться к недокументированным механизмам - тоже мало приятного. Но все же, где-то IDE хранит информацию о типах (в design-time), без регистрации класса. И наверно в EXE где-то это остаеться?
Erik1 (2004-08-17 12:07:00) [3]Если стоит принципиальная задача обойтись без RegisterClass, то можно создать масив с адресами конструкторов. В качестве индекса этого масива использовать перечисляемый тип. Типа:
Type
MyClass = (myPresent1, myPresent2);
TRefPresent = class of TPresent;
Const FListForm: Array[MyClass] of TRefPresent =
(TArutelu....., TArutelu....);
Анонимщик (2004-08-17 11:59:00) [4]Все-таки интересен контекст, в котором нужнен такой результат.
Я знаю, как зарегистрировать, но это извращения. А DK лучше бы посмотрел, как при загрузке формы из ресурса делается то же самое, может, на что-то и натолкнет.
Юрий Зотов (2004-08-17 11:24:00) [5]Без RegisterClass - никак. Разве что Вы заведете свой собственный список классов - но это фактически получится то же самое. Дублировать уже готовый механизм просто нет смысла.
В "Кладовке" видел статью на тему, как можно автоматически зарегистрировать все содержащиеся в программе классы. Может пригодиться. Но, если задача позволяет, я бы просто написал RegisterClasses где-нибудь в initialization, вот и все.