Главная страница
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.018 c
2-1210355753
art36
2008-05-09 21:55
2008.06.01
Нажатие клавиши в другом приложении


2-1210499183
freez
2008-05-11 13:46
2008.06.01
обьеденение баз данных


2-1210127120
fluxion
2008-05-07 06:25
2008.06.01
SQL запрос.


8-1181338607
Deathlord
2007-06-09 01:36
2008.06.01
Winsock


15-1208798690
NaRuTo
2008-04-21 21:24
2008.06.01
Delphi VS C++