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

Вниз

Цепочка наследований и регистрация классов   Найти похожие ветки 

 
harisma ©   (2008-10-30 17:29) [0]

У меня есть набор dll. Для каждого понятия системы есть своя dll. Для каждого из понятий есть базовый класс. Он объявляются в общем юните:
TDsgnMeanClass = class( TComponent )
...
end;

В юните в блоке initialization есть команда RegisterClasses([TDsgnMeanClass]);

Поскольку таких понятий в системе много и они похожи по структуре, я хочу сделать один базовый класс, типа TMeanClassBase, от которого уже будут порождены остальные базовые классы понятий.

Проблема в том, что когда класс понятия порожден от TComponent - то при загрузке все нормально, но когда я вставляю в эту цепочку еще свой базовый класс, то если от него порожден базовый класс только для одного понятия - то все нормально, а если таких классов 2 и больше, при загрузке программа ругается следующим образом:

EFillerError: A class name TMeanClassBase already exists.

Как решить такую проблему?


 
Kolan ©   (2008-10-30 17:35) [1]

Видимо TMeanClassBase попал в несколько длл. Как быть при работе с длл — незнаю, а вот с пакетами, которые по сути теже длл, только борландовские, решается вынесением TMeanClassBase в отдельный пакет, а затем подключение этого общего пакета всезде где надо.


 
harisma ©   (2008-10-30 17:49) [2]

Действительно. Я юнит с этим базовым классом подключаю к каждой из dll.
А как это: "вынесением в отдельный пакет"? Что это даст? Ведь юнит с исходным кодом класса все равно надо будет подключать в моих dll.


 
Kolan ©   (2008-10-30 18:01) [3]

Четко объяснить механизм не могу, но, имхо, модуль с TMeanClassBase вкомпилируется в каждую длл — отсюда и ошибка. Надо сделать так, чтобы TMeanClassBase был только в одной длл, а остальные бы ей пользовались. Как сделать это с длл — не знаю.

Кстати, а почему длл? Знаете ли вы о существовании bpl пакетов и их приимуществах?


 
Leonid Troyanovsky ©   (2008-10-30 18:07) [4]


> Kolan ©   (30.10.08 18:01) [3]

> Как сделать это с длл — не знаю.

Да и не надо.
Надо просто помнить, что длл для этого не предназначена.

--
Regards, LVT.


 
harisma ©   (2008-10-30 18:37) [5]

Все что вы написали - прекрасно. В нашем проекте используются и dll и bpl. Причем bpl у нас как стандартные дельфийские, так и наши собственные.
Прошу уточнения, что я должен сделать с этим моим базовым классом, который, вы говорите, надо добавить в bpl, кроме того, что добавить юнит с его объявлением и реализацией в пакет?


 
Kolan ©   (2008-10-30 18:43) [6]

Юнит с базовым классом кладется в отдельный пакет. Дальше, этот пакет подключается в Requries всех пакетов где он нужен.


 
Leonid Troyanovsky ©   (2008-10-30 18:46) [7]


> harisma ©   (30.10.08 18:37) [5]

>  В нашем проекте используются и dll и bpl.

Вот и прекрасно.
Выкиньте dll в пользу bpl и станет еще лучше.

--
Regards, LVT.


 
harisma ©   (2008-10-30 18:57) [8]


> Юнит с базовым классом кладется в отдельный пакет. Дальше,
>  этот пакет подключается в Requries всех пакетов где он
> нужен.

А надо ли для этого базового класса в пакете в блоке initialization вызывать
RegisterClasses([TMeanClass]);?


 
Kolan ©   (2008-10-30 22:30) [9]

Полагаю, да, если ты хочешь, чтобы твой скупой или злой класс (странное название получается) был зарегистрирован.


 
harisma ©   (2008-10-31 11:29) [10]

Спасибо - все получилось. Спасибо Kolan!



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1255065282
Сергей Кропивин
2009-10-09 09:14
2009.11.22
Как в RichEdit Выделить строку после строки идентификатора?


15-1254210806
Лёша
2009-09-29 11:53
2009.11.22
О компресии данных


15-1253610696
Вася
2009-09-22 13:11
2009.11.22
Распаковать gz


1-1225102426
apic
2008-10-27 13:13
2009.11.22
Дескриптор формы-родителя


11-1208088580
Vitaly
2008-04-13 16:09
2009.11.22
Вызов формы из DLL на KOL в приложении на VCL