Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как создать обьект класса, зная только имя класса.

3.1K
19 декабря 2003 года
Photus
19 / / 18.07.2003
Т.е. нужно сделать процедуру, в котораю передаётся String ClassName, И нужно создать экземпляр класса, имя которого передаётся в ClassName.

У меня все классы, которые могут быть переданы зарегистрированы
RegisterClass'oм. Я знаю есть метод, FindClass он чтоли называется, позволяющий получиться по имени класса Указатель на TMetaClass, соответсвующий этому классу.
И вот сам вопрос: Как имея только TMetaClass создать экземпляр нужного класса?


В Дельфи всё просто "ObjectRef := TSomeMetaClass.Create(параметры);". А как строителю быть?
310
19 декабря 2003 года
fellow
853 / / 17.03.2003
Да также, для всей VCL-овской ботвы всё то же самое.
3.1K
19 декабря 2003 года
Photus
19 / / 18.07.2003
Цитата:
Originally posted by fellow
Да также, для всей VCL-овской ботвы всё то же самое.



Ты уверен? А можешь код привести? Я почему то так и не смог найти аналог. Или у меня сегодня лыжи не едут :(

310
19 декабря 2003 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by Photus


Ты уверен? А можешь код привести? Я почему то так и не смог найти аналог. Или у меня сегодня лыжи не едут :(


Не, код не могу привести, сегодня я уже "устал". А в справке посмотрите насчёт FindClass и TMetaClass.

3.1K
19 декабря 2003 года
Photus
19 / / 18.07.2003
Цитата:
Originally posted by fellow

Не, код не могу привести, сегодня я уже "устал". А в справке посмотрите насчёт FindClass и TMetaClass.



Да раз 10 уже сёдня смотрел... :(((

310
19 декабря 2003 года
fellow
853 / / 17.03.2003
Не получается на С, напишите на паскале и подключите этот паскалевский файл к проекту.
3.1K
19 декабря 2003 года
Photus
19 / / 18.07.2003
:) Самый простой вариант. Понимаю. Но... блин а чё все вокруг орут что Си, Си. Чё значит Борланд как то неправильно VCL для Билдера с Дельфи перевёл? На 99,9% уверен, что это не так.

Ладно. Сам как-нибудь пороюсь в VCL.
310
19 декабря 2003 года
fellow
853 / / 17.03.2003
Ну, борланд не эталон корректных решений. VCL сугубо паскальное порождение, такое на С не переведёшь. Кстати, в исходниках VCL, идущих в комплекте с билдером, даже намёка на MetaClass нет, хоть он в хелпе и присутствует. А в модуле classes.pas в функции TReader.ReadRootComponent есть такие строки:
Код:
begin
  ReadSignature;
  Result := nil;
  GlobalNameSpace.BeginWrite;  // Loading from stream adds to name space
  try
    try
      ReadPrefix(Flags, I);
      if Root = nil then
      begin
        Result := TComponentClass(FindClass(ReadStr)).Create(nil);
        Result.Name := ReadStr;
      end else
3.1K
19 декабря 2003 года
Photus
19 / / 18.07.2003
Цитата:
Originally posted by fellow
Ну, борланд не эталон корректных решений. VCL сугубо паскальное порождение, такое на С не переведёшь.


C этим не спорю.

Цитата:
Не получается на С, напишите на паскале и подключите этот паскалевский файл к проекту.


:) Так и сделал.

fellow, thx.

310
19 декабря 2003 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by Photus
fellow, thx.


велкам, Photus.
Кстати, TMetaClass нашёлся в заголовочном файле systobj.h

3.1K
19 декабря 2003 года
Photus
19 / / 18.07.2003
Цитата:
Originally posted by fellow
Кстати, TMetaClass нашёлся в заголовочном файле systobj.h

:) А чё его искать то? Нажал Правой на слове TMetaClass и Find Declaration :) Вот только метода Create я там не нашёл :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог