![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цепочка наследований и регистрация классов [D5, WinXP]
harisma © (2008-10-30 17:29:00)У меня есть набор dll. Для каждого понятия системы есть своя dll. Для каждого из понятий есть базовый класс. Он объявляются в общем юните:
TDsgnMeanClass = class( TComponent )
...
end;
В юните в блоке initialization есть команда RegisterClasses([TDsgnMeanClass]);
Поскольку таких понятий в системе много и они похожи по структуре, я хочу сделать один базовый класс, типа TMeanClassBase, от которого уже будут порождены остальные базовые классы понятий.
Проблема в том, что когда класс понятия порожден от TComponent - то при загрузке все нормально, но когда я вставляю в эту цепочку еще свой базовый класс, то если от него порожден базовый класс только для одного понятия - то все нормально, а если таких классов 2 и больше, при загрузке программа ругается следующим образом:
EFillerError: A class name TMeanClassBase already exists.
Как решить такую проблему?
harisma (2008-10-31 11:29:00) [1]Спасибо - все получилось. Спасибо Kolan!
Kolan (2008-10-30 22:30:00) [2]Полагаю, да, если ты хочешь, чтобы твой скупой или злой класс (странное название получается) был зарегистрирован.
harisma (2008-10-30 18:57:00) [3]
> Юнит с базовым классом кладется в отдельный пакет. Дальше,
> этот пакет подключается в Requries всех пакетов где он
> нужен.
А надо ли для этого базового класса в пакете в блоке initialization вызывать
RegisterClasses([TMeanClass]);?
Leonid Troyanovsky (2008-10-30 18:46:00) [4]
> harisma © (30.10.08 18:37) [5]
> В нашем проекте используются и dll и bpl.
Вот и прекрасно.
Выкиньте dll в пользу bpl и станет еще лучше.
--
Regards, LVT.
Kolan (2008-10-30 18:43:00) [5]Юнит с базовым классом кладется в отдельный пакет. Дальше, этот пакет подключается в Requries всех пакетов где он нужен.
harisma (2008-10-30 18:37:00) [6]Все что вы написали - прекрасно. В нашем проекте используются и dll и bpl. Причем bpl у нас как стандартные дельфийские, так и наши собственные.
Прошу уточнения, что я должен сделать с этим моим базовым классом, который, вы говорите, надо добавить в bpl, кроме того, что добавить юнит с его объявлением и реализацией в пакет?
Leonid Troyanovsky (2008-10-30 18:07:00) [7]
> Kolan © (30.10.08 18:01) [3]
> Как сделать это с длл — не знаю.
Да и не надо.
Надо просто помнить, что длл для этого не предназначена.
--
Regards, LVT.
Kolan (2008-10-30 18:01:00) [8]Четко объяснить механизм не могу, но, имхо, модуль с TMeanClassBase вкомпилируется в каждую длл — отсюда и ошибка. Надо сделать так, чтобы TMeanClassBase был только в одной длл, а остальные бы ей пользовались. Как сделать это с длл — не знаю.
Кстати, а почему длл? Знаете ли вы о существовании bpl пакетов и их приимуществах?
harisma (2008-10-30 17:49:00) [9]Действительно. Я юнит с этим базовым классом подключаю к каждой из dll.
А как это: "вынесением в отдельный пакет"? Что это даст? Ведь юнит с исходным кодом класса все равно надо будет подключать в моих dll.
Kolan (2008-10-30 17:35:00) [10]Видимо TMeanClassBase попал в несколько длл. Как быть при работе с длл — незнаю, а вот с пакетами, которые по сути теже длл, только борландовские, решается вынесением TMeanClassBase в отдельный пакет, а затем подключение этого общего пакета всезде где надо.