Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование JVCL компонент в DLL [D5, WinXP]


harisma ©   (2009-11-06 10:45:00) 

Есть у меня большой проект. Состоит из одного exe файла и множества (около 20) подгружаемых библиотек (dll) и рантайм пэкеджей (bpl).
Раньше в нем использовались компоненты из RXLib 2.75 и все было нормально.
Я решил заменить устаревшую библиотеку RX на более современную JVCL+JCL.
И в основной программе и в библиотеках использую компоненты из JVCL, в частности TJvLabel, TJvSpinEdit и другие. Когда загружена только основная программа - все нормально. Но когда подгружатся библиотеки, возникает проблема - выскакивает ошибка, что TJvdataItemsList already exists.
Опытным путем я установил, что проблема исходит из секции Initialization модуля JvDataProvider.pas, а он в свою очередь перечислен в списке uses в модуле JvLabel (где объявлен и реализован компонент TJvLabel).
Что делать? Подскажите. Очень жду. Заранее спасибо.


harisma   (2009-11-06 14:11:00) [1]


> Ну это скорей исключение, чем правило.

Все равно спасибо, что откликнулись на зов о помощи :)


Сергей М.   (2009-11-06 14:09:00) [2]


> опытным путем я установил, что именно этого пакета (JvCoreD5R)
> оказалось достаточно


Ну это скорей исключение, чем правило.


harisma   (2009-11-06 14:03:00) [3]


> > может только его достаточно подключить?
>
>
> Вряд ли.
> Регистрация классов обычно осуществляется при иниц-ции тех
> модулей, в которых они объявлены.


А все же опытным путем я установил, что именно этого пакета (JvCoreD5R) оказалось достаточно, чтобы мои DLL стали загружаться :)

За остальные комменты спасибо - учту при дальнейшей работе.


Игорь Шевченко   (2009-11-06 13:20:00) [4]

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


Сергей М.   (2009-11-06 13:09:00) [5]


> может только его достаточно подключить?


Вряд ли.
Регистрация классов обычно осуществляется при иниц-ции тех модулей, в которых они объявлены.


> если я захочу использовать другие компоненты из серии JVCL,
>  но находящиеся в других пакетах, то придется и эти другие
> пакеты вновь подключать


Конечно. Иначе те же грабли хлобыстнут в то же место.


> Какой из них корректнее указывать в списке рантайм пакетов?


Разумеется R.


harisma   (2009-11-06 12:55:00) [6]

Ну, на основании данной ссылки и поиска в гугле сообщения об ошибке "A class named ... already exists" пришел к выводу, что необходимо все же в список Runtime packages проекта и либ к нему включить runtime package от JVCL пакета. Только вот который из присутствующих 60 runtime packages подключить?
Впрочем я добился требуемого эффекта при подключении JvStdCtrlsD5D пакета, но если я захочу использовать другие компоненты из серии JVCL, но находящиеся в других пакетах, то придется и эти другие пакеты вновь подключать. Правда есть один пакет JvCoreD5D(R), который вызывают все другие пакеты - может только его достаточно подключить? И еще - насколько я понимаю, последняя буква в названии пакета (R и D) указывает соответственно на рантайм и дизайнтайм. Какой из них корректнее указывать в списке рантайм пакетов?


Сергей М.   (2009-11-06 12:15:00) [7]

Вот здесь

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1256119948&n=18
мусолилась та же проблема, только вид сбоку.

Прочитай внимательно и вникни, не взирая на D5 vs D7 - суть одна и та же.


Сергей М.   (2009-11-06 12:10:00) [8]


> а в DLL хранится весь остальной функционал проекта


Что мешает хранить его в BPL ?
Или этот самый "функционал" планируется использовать в приложениях, среда разработки которых не имеет отношения к Делфи ?


harisma   (2009-11-06 12:07:00) [9]


> А собссно почему dll , а не bpl ?


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

Проект построен по технологии DCOM.


Сергей М.   (2009-11-06 11:59:00) [10]

А собссно почему dll , а не bpl ?


harisma   (2009-11-06 11:55:00) [11]

Включена во всех проектах.


Сергей М.   (2009-11-06 11:51:00) [12]


> опция то эта у меня включена


Во всехпроектах ?


harisma   (2009-11-06 11:49:00) [13]

Да, но в Делфи 5 не было модулей RTL, а модули VCL (в частности VCL50) в списке присутствует, но этого не достаточно :(


Сергей М.   (2009-11-06 11:39:00) [14]


> Чего еще не хватает


см. [3]


harisma   (2009-11-06 11:33:00) [15]

У меня в подгружаемой DLL в списке "Build With Run-Time Packages" указаны тикие модули:

Vclx50;Vclmid50;Vcljpg50;Vcldb50;vclsmp50;Vcl50;EQTLD5;dxEdtrD5;VPATE4;VPA4

Чего еще не хватает, чтобы JVCL компоненты нормально работали?


Сергей М.   (2009-11-06 11:17:00) [16]


> в списке JVCL модули там отсутствуют


А и не надо чтобы они там присутствовали, если ты подружаешь/выгружаешь их динамически в ран-тайм.

Главное чтобы в списке были как минимум модули VCL и RTL


harisma   (2009-11-06 11:12:00) [17]

Немного подробнее можно? Дело в том, что опция то эта у меня включена, но вот в списке JVCL модули там отсутствуют. Что я должен сделать, чтоб все стало как надо?


Сергей М.   (2009-11-06 11:07:00) [18]

Проекты всхвзаимодействующие модулей должны быть собраны с установленной опцией Build With Run-Time Packages.
Это условие тобой соблюдено ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо