Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1299926254
Сергей
2011-03-12 13:37
2011.06.19
Проблемы с запуском программы


15-1299164683
bad man
2011-03-03 18:04
2011.06.19
бинарные операции


2-1299862251
Artemgood
2011-03-11 19:50
2011.06.19
Создать Автоматизированный информационный стенд колледжа


2-1300221363
Scott Storch
2011-03-15 23:36
2011.06.19
Добавление в таблицу БД


2-1299761604
картман
2011-03-10 15:53
2011.06.19
почему точка останова не активна?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский