Название: Как сделать DLL Отправлено: BaltikS от Октябрь 18, 2006, 11:06 Помогите плиз....сижу туплю...
Как правильно создать класс (например QMyWidget) и запихнуть его в ДЛЛ... И как правильно этот виджет вызвать? Сделал так: Создал новый проект NEW SHARED LIBRARY... Код:
Получил ДЛЛ с ЛИБом. Подключаю ЛИБ к проекту.... Пишу строки в коде: Код:
Компилируется, линкуется... Но потом при старте приложения говорит "Не найдена точка входа" Что делать? ____________________ Имею QT 4.2 + VS2005 Название: Re: Как сделать DLL Отправлено: Maxz от Октябрь 18, 2006, 14:38 Цитата: "BaltikS" Как правильно создать класс (например QMyWidget) и запихнуть его в ДЛЛ... И как правильно этот виджет вызвать? Глянь в примерах examples/tools/plugandpaint и examples/tools/plugandpaintplugins - там что-то подобное сделано. Название: Как сделать DLL Отправлено: BaltikS от Октябрь 18, 2006, 15:04 Спасибо, глядел, это подключение плагина........
На самом деле всё получилось, как описано выше.... Только с пересозданием проекта.... Глюк наверное VS... Название: Как сделать DLL Отправлено: Admin от Октябрь 18, 2006, 18:31 обычно всякие макросы типа DLL_EXPORT пользуют
Название: Как сделать DLL Отправлено: Lion от Октябрь 18, 2006, 22:54 Цитата: "Admin" обычно всякие макросы типа DLL_EXPORT пользуют А в Qt есть готовый макрос? Название: Как сделать DLL Отправлено: Admin от Октябрь 19, 2006, 07:56 нет, так как это специфично для каждой платформы
в Windows DLL_Export в Linux вообще не надо так что сам заведи макрос и в путь Название: Как сделать DLL Отправлено: nikolai98 от Октябрь 21, 2006, 00:52 Хелп, помогите.... Как сделать динамическую библиеотеку с классом от QWidget, так как написоно в первом сообщении, но для Qt 3... Весь ассистент перечитал, все варианты про переписал... Не получается... Либо создаётся LIB, либо DLL.... Либа линкуется только статически... Хелп...если можно на примере....
Название: Как сделать DLL Отправлено: Dendy от Октябрь 21, 2006, 08:48 MyWidget.h
Код:
MyWidget.cpp Код:
MyWidget.pro // for DLL building Код: TEMPLATE = lib Название: Как сделать DLL Отправлено: nikolai98 от Октябрь 21, 2006, 09:19 Dendy, спасибо за код, только он очень похож на DLL собранную в Qt4, а нужно для Qt3.... Ещё забыл упомянуть, что библиотеки надо собирать не только в Windows, но и в Linux... Извините за некоторый тупизм, но моих знаний никак не хватает :)
Название: Как сделать DLL Отправлено: Admin от Октябрь 21, 2006, 09:25 смотри тут
#if defined Q_WS_WIN Название: Как сделать DLL Отправлено: nikolai98 от Октябрь 21, 2006, 09:59 В результате сборки я получил опять статическую LIB! А мне нужно DLL!!!!! и эту ДЛЛ потом подключать к другим проектам. А полученая ЛИБ линкуется опять только статически!!!
Название: Как сделать DLL Отправлено: Dendy от Октябрь 21, 2006, 12:25 ВсмьІсле статически линкуется с либами Qt? Или DLL вообще нет? Может забьІл дописать в проект:
Код: TEMPLATE = lib Название: Как сделать DLL Отправлено: nikolai98 от Октябрь 21, 2006, 13:12 Слушай, ты гений! Тебе надо памятник поставить.... Огромное спасибо!
Название: Как сделать DLL Отправлено: Lion от Октябрь 27, 2006, 14:47 Сделал как написано, получил dll, а как теперь научить другие проекты ею пользоваться? При компиляции сплошные ошибки типа этой:
Код:
Название: Как сделать DLL Отправлено: Admin от Октябрь 27, 2006, 14:51 все экспортируем функции должны быть обьявлены как __declspec(dllexport)
Название: Как сделать DLL Отправлено: BaltikS от Октябрь 27, 2006, 17:18 Такое ощущение, что ты к проекту LIB забыл подключить....
Название: Как сделать DLL Отправлено: Lion от Октябрь 28, 2006, 09:51 Цитата: "BaltikS" Такое ощущение, что ты к проекту LIB забыл подключить.... Никакого lib не появилось. Как его подключить? Название: Как сделать DLL Отправлено: Dendy от Октябрь 28, 2006, 13:12 Рядом с myapp.dll создаётся myapp.lib, но только если у тебя експортится из DLL хотя-бьІ один символ.
Смотри мой пост ранее. Класс експортится примерно таким способом: Код: #if defined Q_WS_WIN При етом в файле проекта, которьІй создаёт DLL должен стоять макрос DEFINES += MYWIDGET_BUILD, что означает применение к данному классу експортирования: MYWIDGET_EXPORT == __declspec(dllexport). В файле проекта программьІ, в которой тьІ используешь оную DLL не ставишь никаких макросов. Ето приводит к тому, что заголовочник для компиллятора будет вьІглядеть по-другому. А именно: MYWIDGET_EXPORT == __declspec(dllimport). В результате линковщик будет импортировать етот класс. Название: Как сделать DLL Отправлено: crocus от Октябрь 28, 2006, 14:30 А порекомендуй, где про это можно почитать, для систематизированного понимания??
Название: Как сделать DLL Отправлено: Dendy от Октябрь 28, 2006, 14:38 Для виндьІ В MSDN наверное ;) Да и просматривать исходники Qt никогда не мешает.
Название: Как сделать DLL Отправлено: Lion от Октябрь 28, 2006, 15:25 Всё сделал как написано, только либ не увидел. Теперь
её подключил, все классы линкуются а отдельные функции нет. Делаю так: Код:
где UTILS_EXPORT = MYWIDGET_EXPORT Название: Как сделать DLL Отправлено: Вячеслав от Октябрь 28, 2006, 16:40 Цитата: "Lion" Всё сделал как написано, только либ не увидел. Теперь её подключил, все классы линкуются а отдельные функции нет. Делаю так: Код:
где UTILS_EXPORT = MYWIDGET_EXPORT Функция не из C-linkage случаем ? i.e. extern "C" не надо ? Код:
Название: Как сделать DLL Отправлено: Lion от Октябрь 28, 2006, 21:23 Для полной ясности привожу исходные коды
Код: #ifndef UTILS_EXPORT Код: #ifndef _SHA1_H_ добавлено спустя 7 минут: Для проекта библиотеки определено UTILS_DLL Название: Как сделать DLL Отправлено: Dendy от Октябрь 28, 2006, 21:58 А реализации етих не-линкующихся функций присутствуют? Уверен, что не ошибся ни в одной букве функции в CPP-файле? Компиллятор ведь промолчит.
Кроме того, всегда можно посмотреть что експортится сторонними утилитами. Название: Как сделать DLL Отправлено: Lion от Октябрь 28, 2006, 22:22 До этого все успешно линковалось статически
Название: Как сделать DLL Отправлено: Lion от Ноябрь 03, 2006, 21:10 Как всегда всё оказалось проще чем казалось, просто Q_WS_WIN определяется в qglobal.h, а в моем случае макрос инклудился вперед всех qt -шных модулей. #include <QObject> в макросе решило все проблемы.
|