Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
Вниз
Как правильно зарегестрировать класс. Найти похожие ветки
← →
Matveih1 © (2008-05-13 09:24) [0]Добрый день. Есть основная программа и есть bpl. При загрузке bpl происходит регистрация класса
initialization
begin
RegisterClass(TForm2);
end;
но основная программа не может найти класс Form2var
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c