![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование 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.
Это условие тобой соблюдено ?