Russian Qt Forum
Сентябрь 25, 2024, 06:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание динамической библиотеки (DLL)  (Прочитано 7979 раз)
Tam-Tam
Гость
« : Октябрь 11, 2007, 00:57 »

Помогите разобраться с плагинами.
Задача следующая. Есть производный класс от QWidget(допустим с названием MyClass). Кроме создание самого QWidget в его конструкторе с помощью менеджеров компоновок размещаются на созданном QWidget QPushButton, QLineEdit и QLabel. Так же добавляются несколько слотов и сигналов. В результате получается некий диалог с простенькой функциональностью. Дальше создавая экземпляр класса (MyClass *my = new ...) используем как обычный виджет. Требуется запихнуть этот класс в библиотеку и динамически ее распаковать что бы можно было так же создать (MyClass *my = new ...) и использовать класс. Примеры идущие с мануалом Qt не подходят поскольку там классы не наследуются. При попытке сделать по такому же образу столкнулся с проблемой что ни один из методов наследуемого класса после распаковки не виден. Не говоря уже о конструкторе на который компилятор ругается(поскольку отказывается принимать виртуальный конструктор).
Помогите с хедерфайлом интерфейса класса и части кода где библиотека распаковывается и создается экземпляр класса. Буду безмерно рад любым примерам. Если сильно лень писать код, опишите хотя бы словами.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Октябрь 11, 2007, 01:14 »

Вам нужно создать динамическую либу или плагин к Qt дизайнеру?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
vregess
Гость
« Ответ #2 : Октябрь 11, 2007, 07:22 »

Если нужно наследование, то, по-видимому, целью является динамическая библиотека...
Может поможет : http://prog.org.ru/forum/index.php/topic,6209.0.html
Записан
Tam-Tam
Гость
« Ответ #3 : Октябрь 11, 2007, 07:50 »

Вам нужно создать динамическую либу или плагин к Qt дизайнеру?
Динамическую

Если нужно наследование, то, по-видимому, целью является динамическая библиотека...
Может поможет : http://prog.org.ru/forum/index.php/topic,6209.0.html
Вроде именно то что нужно. Можешь дать исходники своей либы из той темы ? Ты там указывал что есть еще одна либа которая нормально собирается. Ее тоже если можешь дай.
Записан
vregess
Гость
« Ответ #4 : Октябрь 11, 2007, 08:58 »

Ты там указывал что есть еще одна либа которая нормально собирается.
Я наврал)
Собирается-то она собирается, но когда тащишь из нее классы - облом.

Можешь дать исходники своей либы из той темы?

Накидаю тебе по-позже (ща занят) пример простой библиотеки, тебе так легче будет.
Куда кидать?
Ну или если желаешь - кину свою либу... Выбирай.
Записан
Tam-Tam
Гость
« Ответ #5 : Октябрь 11, 2007, 11:01 »

Накидаю тебе по-позже (ща занят) пример простой библиотеки, тебе так легче будет.
Куда кидать?
Ну или если желаешь - кину свою либу... Выбирай.

Можно и попозже. Небольшой пример распаковки, если не сложно, тоже напиши.
Скинь все что есть по данной теме.
garka.com[собака]mail.ru
Записан
ритт
Гость
« Ответ #6 : Октябрь 11, 2007, 17:20 »

какой компилятор? если собираете на вс и методы/классы из либы не видны, могу предположить, что класс не помечен на импорт/экспорт (либо неправильно помечен). если есть время, можее полистать код модуля гуи кутэ - там ведь такая же точно задача для виджетов.

я так же точно использую некоторые диалоги из плагинов - всё замечательно наследуется, если не забывать про порядок импорта/экспорта Улыбающийся
Записан
Tam-Tam
Гость
« Ответ #7 : Октябрь 11, 2007, 19:52 »

я так же точно использую некоторые диалоги из плагинов - всё замечательно наследуется, если не забывать про порядок импорта/экспорта Улыбающийся

Я безумно рад что у тебя пашет. Сделай теперь так что б и у меня пахало ) Поделись примером хоть одним.
Записан
ритт
Гость
« Ответ #8 : Октябрь 11, 2007, 20:36 »

как фамильярно

в либе:
Код:
#include <QtGlobal>

#ifdef Q_OS_WIN
#ifdef LIB_BUILD
#define LIB_EXPORT Q_DECL_EXPORT
#else
#define LIB_EXPORT Q_DECL_IMPORT
#endif
#endif
#ifndef LIB_EXPORT
#define LIB_EXPORT
#endif

class LIB_EXPORT SomeDialog : public QDialog
{
Q_OBJECT

public:
SomeDialog(const QString& text, QObject* parent = 0);
virtual ~SomeDialog();

QString title() const;

signals:
void titleChanged(const QString& title);

public slots:
void setTitle(const QString& text);
}

затем соответствующая набивка в майдиалог.цпп

собираем с дефайном LIB_BUILD

затем в программе (считаем, что либу выше подлинковали на этапе сборки или ран-тайм)
Код:
//...

SomeDialog* dialog = new SomeDialog("мой диалог", this);

//...

собираем без дефайна LIB_BUILD
Записан
Tam-Tam
Гость
« Ответ #9 : Октябрь 11, 2007, 23:54 »

Огромное спасибо

Что изменится если будет другая ОС ? Дефайны поменяются ?
Дай пожалуйста еще тот маленький кусочек кода, где либа динамически подлинковывается.
Записан
ритт
Гость
« Ответ #10 : Октябрь 12, 2007, 00:00 »

говорим "ос", подразумеваем "компилятор"
для НЕвенды Q_DECL_EXPORT и Q_DECL_IMPORT станут пустыми и ничего не случится

> динамически подлинковывается
то есть, ран-тайм? смотри ассистант на предмет "как делать плагины"
не хочешь плагинами, смотри там же QLibrary*
Записан
Tam-Tam
Гость
« Ответ #11 : Октябрь 12, 2007, 00:50 »

то есть, ран-тайм? смотри ассистант на предмет "как делать плагины"
не хочешь плагинами, смотри там же QLibrary*

Я плагином изначально и пытался сделать. Ничего из этого не вышло.
« Последнее редактирование: Октябрь 12, 2007, 00:52 от Tam-Tam » Записан
ритт
Гость
« Ответ #12 : Октябрь 12, 2007, 02:14 »

а что именно не вышло? создать плагин? подключить плагин? создать сущность класса, описание которого хранится в плагине?

Записан
Tam-Tam
Гость
« Ответ #13 : Октябрь 12, 2007, 08:12 »

Отправил примеры на garka.com[собака]mail.ru
Спасибо.

а что именно не вышло? создать плагин? подключить плагин? создать сущность класса, описание которого хранится в плагине?

Создать сущность и как следствие создать плагин. До подключения дело вообще не дошло.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.084 секунд. Запросов: 23.