Форум: "Основная";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
ВнизИспользование JVCL компонент в DLL Найти похожие ветки
← →
harisma © (2009-11-06 10:45) [0]Есть у меня большой проект. Состоит из одного exe файла и множества (около 20) подгружаемых библиотек (dll) и рантайм пэкеджей (bpl).
Раньше в нем использовались компоненты из RXLib 2.75 и все было нормально.
Я решил заменить устаревшую библиотеку RX на более современную JVCL+JCL.
И в основной программе и в библиотеках использую компоненты из JVCL, в частности TJvLabel, TJvSpinEdit и другие. Когда загружена только основная программа - все нормально. Но когда подгружатся библиотеки, возникает проблема - выскакивает ошибка, что TJvdataItemsList already exists.
Опытным путем я установил, что проблема исходит из секции Initialization модуля JvDataProvider.pas, а он в свою очередь перечислен в списке uses в модуле JvLabel (где объявлен и реализован компонент TJvLabel).
Что делать? Подскажите. Очень жду. Заранее спасибо.
← →
Сергей М. © (2009-11-06 11:07) [1]Проекты всх взаимодействующие модулей должны быть собраны с установленной опцией Build With Run-Time Packages.
Это условие тобой соблюдено ?
← →
harisma © (2009-11-06 11:12) [2]Немного подробнее можно? Дело в том, что опция то эта у меня включена, но вот в списке JVCL модули там отсутствуют. Что я должен сделать, чтоб все стало как надо?
← →
Сергей М. © (2009-11-06 11:17) [3]
> в списке JVCL модули там отсутствуют
А и не надо чтобы они там присутствовали, если ты подружаешь/выгружаешь их динамически в ран-тайм.
Главное чтобы в списке были как минимум модули VCL и RTL
← →
harisma © (2009-11-06 11:33) [4]У меня в подгружаемой DLL в списке "Build With Run-Time Packages" указаны тикие модули:
Vclx50;Vclmid50;Vcljpg50;Vcldb50;vclsmp50;Vcl50;EQTLD5;dxEdtrD5;VPATE4;VPA4
Чего еще не хватает, чтобы JVCL компоненты нормально работали?
← →
Сергей М. © (2009-11-06 11:39) [5]
> Чего еще не хватает
см. [3]
← →
harisma © (2009-11-06 11:49) [6]Да, но в Делфи 5 не было модулей RTL, а модули VCL (в частности VCL50) в списке присутствует, но этого не достаточно :(
← →
Сергей М. © (2009-11-06 11:51) [7]
> опция то эта у меня включена
Во всех проектах ?
← →
harisma © (2009-11-06 11:55) [8]Включена во всех проектах.
← →
Сергей М. © (2009-11-06 11:59) [9]А собссно почему dll , а не bpl ?
← →
harisma © (2009-11-06 12:07) [10]
> А собссно почему dll , а не bpl ?
Потому что у нас в bpl хранятся непосредственно наши компоненты и связанные с ними вспомогательные формы (их всего несколько), а в DLL хранится весь остальной функционал проекта.
Проект построен по технологии DCOM.
← →
Сергей М. © (2009-11-06 12:10) [11]
> а в DLL хранится весь остальной функционал проекта
Что мешает хранить его в BPL ?
Или этот самый "функционал" планируется использовать в приложениях, среда разработки которых не имеет отношения к Делфи ?
← →
Сергей М. © (2009-11-06 12:15) [12]Вот здесь
http://delphimaster.net/view/2-1256119948/
мусолилась та же проблема, только вид сбоку.
Прочитай внимательно и вникни, не взирая на D5 vs D7 - суть одна и та же.
← →
harisma © (2009-11-06 12:55) [13]Ну, на основании данной ссылки и поиска в гугле сообщения об ошибке "A class named ... already exists" пришел к выводу, что необходимо все же в список Runtime packages проекта и либ к нему включить runtime package от JVCL пакета. Только вот который из присутствующих 60 runtime packages подключить?
Впрочем я добился требуемого эффекта при подключении JvStdCtrlsD5D пакета, но если я захочу использовать другие компоненты из серии JVCL, но находящиеся в других пакетах, то придется и эти другие пакеты вновь подключать. Правда есть один пакет JvCoreD5D(R), который вызывают все другие пакеты - может только его достаточно подключить? И еще - насколько я понимаю, последняя буква в названии пакета (R и D) указывает соответственно на рантайм и дизайнтайм. Какой из них корректнее указывать в списке рантайм пакетов?
← →
Сергей М. © (2009-11-06 13:09) [14]
> может только его достаточно подключить?
Вряд ли.
Регистрация классов обычно осуществляется при иниц-ции тех модулей, в которых они объявлены.
> если я захочу использовать другие компоненты из серии JVCL,
> но находящиеся в других пакетах, то придется и эти другие
> пакеты вновь подключать
Конечно. Иначе те же грабли хлобыстнут в то же место.
> Какой из них корректнее указывать в списке рантайм пакетов?
Разумеется R.
← →
Игорь Шевченко © (2009-11-06 13:20) [15]Если ты в списке пакетов не указываешь явно пакет, но используешь из него юниты, то они компилируются в проект. При этом пакет ты загрузить не можешь из-за конфликта юнитов.
Вывод простой - все, что используешь из пакетов, должно быть перечислено.
← →
harisma © (2009-11-06 14:03) [16]
> > может только его достаточно подключить?
>
>
> Вряд ли.
> Регистрация классов обычно осуществляется при иниц-ции тех
> модулей, в которых они объявлены.
А все же опытным путем я установил, что именно этого пакета (JvCoreD5R) оказалось достаточно, чтобы мои DLL стали загружаться :)
За остальные комменты спасибо - учту при дальнейшей работе.
← →
Сергей М. © (2009-11-06 14:09) [17]
> опытным путем я установил, что именно этого пакета (JvCoreD5R)
> оказалось достаточно
Ну это скорей исключение, чем правило.
← →
harisma © (2009-11-06 14:11) [18]
> Ну это скорей исключение, чем правило.
Все равно спасибо, что откликнулись на зов о помощи :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c