Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно зарегестрировать класс.


Matveih1 ©   (2008-05-13 09:24:00) 

Добрый день. Есть основная программа и есть bpl. При загрузке bpl происходит регистрация класса

initialization
begin
 RegisterClass(TForm2);
end;


но основная программа не может найти класс Form2
var
ModuleP: HMODULE;
Intf: IMayIntf;
AClass: TComponentClass;
AObj: TComponent;
begin
ModuleP := LoadPackage('Pack.bpl');
 if ModuleP <> 0 then
 begin
   AClass := TComponentClass(FindClass('TForm2'));
    if Assigned(AClass) then
      AObj := AClass.Create(Self);
  end;


где я промазал?


Matveih1   (2008-05-13 12:30:00) [1]


> Pack.bpl пользует внешнюю rtl.bpl и в ней регистрируется
> класс, хост приложение использует прилинкованую rtl и поиск
> класса происходит в ней... решение скомпилировать хост приложение
> с пакетами, хватит одного rtl остальные можно выкинуть,
> но советую добавить и vcl т.к. RegisterClass(TForm2);

Помогло! Спасибо


Сергей М.   (2008-05-13 10:20:00) [2]


> Slym ©   (13.05.08 10:18) [5]


Угу. Ты прав, конечно же rtl, а не RTTI.
Думал о Фоме, а написал про Ерему)


Slym   (2008-05-13 10:19:00) [3]

Ega23 ©   (13.05.08 10:11) [3]
TPersistentClass = class of TPersistent;
procedure RegisterClass(AClass: TPersistentClass);


Slym   (2008-05-13 10:18:00) [4]

Сергей М. ©   (13.05.08 9:31) [1]
собственный экз-р RTTI

причем тут RTTI? то что белее 1 копии ето верно, но копий rtl а не RTTI...
Pack.bpl пользует внешнюю rtl.bpl и в ней регистрируется класс, хост приложение использует прилинкованую rtl и поиск класса происходит в ней... решение скомпилировать хост приложение с пакетами, хватит одного rtl остальные можно выкинуть, но советую добавить и vcl т.к. RegisterClass( TForm2); ...


Сергей М.   (2008-05-13 10:16:00) [5]


> Ega23 ©


Справка дает однозначный ответ:

The AClass parameter is the class that is descended from TPersistent


Ega23   (2008-05-13 10:11:00) [6]

Кстати. Я любой потомок TPersistent могу зарегистрировать? Точнее, достаточно ли моему классу быть потомком TPersistent, если я его хочу зарегистрировать? Или ещё что-то нужно?


Игорь Шевченко   (2008-05-13 09:53:00) [7]


> При загрузке bpl происходит регистрация класса


Я не совсем помню детали, но с регистрацией классов в инициализации загружаемых пакетов в какое-то время были проблемы. Поэтому проще предусмотреть отдельную, явно вызываемую функцию у пакета, которая будет заниматься регистрацией его классов после загрузки.


Сергей М.   (2008-05-13 09:31:00) [8]


> где я промазал?


У твоего хост-приложения свой собственный экз-р RTTI, вот здесь ты и промазал.

Обеспечение единого экз-ра RTTI для всех модулей приложения достигается сборкой этих модулей с опцией использования рантайм-пакетов


Наверх

Титульная страница Поиск, карта сайта Написать письмо