Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.01;
Скачать: CL | DM;

Вниз

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

 
Matveih1 ©   (2008-05-13 09:24) [0]

Добрый день. Есть основная программа и есть 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;


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


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


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


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

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


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


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


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


 
Ega23 ©   (2008-05-13 10:11) [3]

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


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


> Ega23 ©


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

The AClass parameter is the class that is descended from TPersistent


 
Slym ©   (2008-05-13 10:18) [5]

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

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


 
Slym ©   (2008-05-13 10:19) [6]

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


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


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


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


 
Matveih1 ©   (2008-05-13 12:30) [8]


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.06.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
15-1208721535
Dmitry S
2008-04-20 23:58
2008.06.01
дешевые СМС.


2-1210585970
smartleds
2008-05-12 13:52
2008.06.01
Подскажите плз в чем может быть причина


6-1188030200
foreverDelphi
2007-08-25 12:23
2008.06.01
TClientSocket, TServerSocket - вопросы по теории


2-1209995988
Инна
2008-05-05 17:59
2008.06.01
Запрос и удаление


9-1170543317
DevilDevil
2007-02-04 01:55
2008.06.01
BGRA