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

Вниз

Использование 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
6-1230461387
WeTeR
2008-12-28 13:49
2011.06.19
Отправка очереди из изображений по сети


1-1257843882
antonsha
2009-11-10 12:04
2011.06.19
Вопрос по добавлению элементов


15-1298958622
Гость
2011-03-01 08:50
2011.06.19
Как саботировать работы?


11-1212932481
Psy
2008-06-08 17:41
2011.06.19
Баг Grush


1-1257493538
harisma
2009-11-06 10:45
2011.06.19
Использование JVCL компонент в DLL