Название: Как писать dll'ки?? Отправлено: QCasper от Октябрь 03, 2005, 16:23 Вопрос возможно глупый, и не уместный, но не подскажете где можно взять инфу по написанию плагинов для своих Qt приложений? Т.е. хочется научиться создавать динамически подгружаемые библиотеки, и потом загружать их из своих Qt приложений. Ну и от статических lib'ов тоже не откажусь.
Название: Re: Как писать dll'ки?? Отправлено: Kostya от Октябрь 03, 2005, 17:33 Цитата: "QCasper" Вопрос возможно глупый, и не уместный, но не подскажете где можно взять инфу по написанию плагинов для своих Qt приложений? Т.е. хочется научиться создавать динамически подгружаемые библиотеки, и потом загружать их из своих Qt приложений. Ну и от статических lib'ов тоже не откажусь. Да все просто в принципе. Вот как это делаю я (Windows, хотя для *nix будет тоже работать): 1. создаю проект в .pro файле ставлю TEMPLATE = lib CONFIG += dll 2. Описываю класс в этом проекте такой какой мне надо 3. В заголовчном файле описываю прототип функции для экспорта Код:
4. пишу начинку функции - очень простую Код:
5. Откомпилил все - получилась DLL 6. В главной проге Код:
Название: Re: Как писать dll'ки?? Отправлено: serg_hd от Июнь 23, 2010, 01:22 C плагинами это одно (в Шлее есть пример, хотя ещё не проверял), но как надо оформлять код библиотеки, НЕ плагина Qt?
Знаю, что тут нужны какие-то макросы, вот и хотелось бы уточнить какие именно, т.к. в обилии тем посвящённых этим dll советы, в основном, разноплановые и много их очень: DynLib.h: Код
DynLib.cpp: Код
Код основной программы, к которой подключается данная библиотека: Код
Весь код максимально упростил, чтобы оставить суть. INCLUDEPATH и LIBS в pro-файле основной программы прописаны правильно, библиотека собирается тоже без каких-либо ошибок (dll и .a-файлы создаются), но в момент запуска основная программа вылетает с: RUN FAILED (exit value -1 073 741 515, total time: 203ms) Это, конечно, если оставить в ней строку DynLib lib; Собственно, как избавится от вылета - какие именно нужны макросы и где их прописывать? Название: Re: Как писать dll'ки?? Отправлено: kuzulis от Июнь 23, 2010, 07:31 serg_hd ,
а это читали: http://www.prog.org.ru/topic_8259_0.html ?? Название: Re: Как писать dll'ки?? Отправлено: Гурман от Июнь 23, 2010, 11:15 вообще-то у Шлее все достаточно доходчиво описано, и пример корректный, если делать по нему, то все получится
у меня по этому примеру все работает, код смотрит в каталог, где должны лежать библиотеки, загружает поочередно все найденные, в загруженной ищет функцию инициализации (ее имя во всех моих подключаемых библиотеках одинаковое), если находит, вызывает ее, если не находит, или функция вернула false, выгружает библиотеку Название: Re: Как писать dll'ки?? Отправлено: serg_hd от Июнь 23, 2010, 11:30 serg_hd , Всё читал, а именно по этой ссылке написано:а это читали: http://www.prog.org.ru/topic_8259_0.html ?? >>Если необходимо подгрузить класс динамически — лучше оформить его как плагин. А я и хочу динамически, но не как плагин. вообще-то у Шлее все достаточно доходчиво описано, и пример корректный, если делать по нему, то все получится Ничего там не доходчиво, всего лишь как импортировать функцию (и то через QLybrary, хочу без неё) и как писать плагины. Варианта dll не-плагина и содержащей класс вообще нету.Название: Re: Как писать dll'ки?? Отправлено: BRE от Июнь 23, 2010, 11:35 Нет в dll никаких классов!
Классы - это абстрактные понятия, которые существую в голове разработчика и компилятора. :) В ОС нет такого понятия, как плагин. Это обычная dll. Не морочьте себе голову и делайте так, как рекомендуется в assistant. Это самый простой способ. ;) Название: Re: Как писать dll'ки?? Отправлено: serg_hd от Июнь 23, 2010, 11:38 Я не про длл, а про .h и .cpp файлы для создания dll. Как там рекомендуется, только как плагины наверн?
В ОС нет такого понятия, как плагин. Это обычная dll. Да это понятно, только в Qt динам. dll оформляются по-своему и называются плагинами, а не так как я привёл пример выше.Название: Re: Как писать dll'ки?? Отправлено: Гурман от Июнь 23, 2010, 14:11 в Qt dll, подключаемые на этапе сборки приложения - такие же dll как и все остальные dll из Qt, и совершенно не плагины
поэтому в качестве примера самой dll можно использовать любую dll из комплекта Qt Название: Re: Как писать dll'ки?? Отправлено: serg_hd от Июнь 23, 2010, 18:16 serg_hd , Да, именно так у меня код (который выше на неск. постов) и оформлен - за исключением ddll.h. Он мне не нужен, хотя и с ним пробовал, эффект тот же - прога, после компиляции/сборки, с подключённой библиотекой, в момент запуска вылетает.а это читали: http://www.prog.org.ru/topic_8259_0.html ?? Наверное что-то с настройками IDE, она такая что может, есть различия в pro-файлах между ней и криатором. Если exe основной проги просто создать (без запуска), скопировать его в отдельный каталог с dll-кой, то при запуске всё ок, dll свою работу тоже делает. ----- Итого, ответ на мой вопрос прост - прописать путь к самой dll в PATH, либо указать DLLDESTDIR. Название: Re: Как писать dll'ки?? Отправлено: Гурман от Июнь 24, 2010, 07:58 пссс... ну разумеется, exe к dll компоновщик привязал, а при старте она не загружается, потому как ее нигде не видно, и IDE тут ни при чем - для креатора укажите DESTDIR в .pro создания dll чтобы она сразу ложилась туда же, где exe создается
Название: Re: Как писать dll'ки?? Отправлено: serg_hd от Июнь 24, 2010, 19:04 я пишу не в криаторе этом примитивном.
пссс... ну разумеется так обычно всегда говорят, когда уже не надо)укажите DESTDIR в .pro создания dll чтобы она сразу ложилась туда же, где exe создается ну да, я ж и говорю, указать DLLDESTDIR(либо DESTDIR) можно ещё, как вариант.Название: Re: Как писать dll'ки?? Отправлено: Гурман от Июнь 25, 2010, 08:47 Цитировать так обычно всегда говорят, когда уже не надо да просто "dll должна быть доступна при запуске исполнимого модуля" это такая же аксиома, как "у байта 8 бит", и странно когда разработчики такие ляпы допускают... |