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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как сделать DLL  (Прочитано 15646 раз)
BaltikS
Гость
« : Октябрь 18, 2006, 11:06 »

Помогите плиз....сижу туплю...
Как правильно создать класс (например QMyWidget) и запихнуть его в ДЛЛ... И как правильно этот виджет вызвать?

Сделал так:
Создал новый проект NEW SHARED LIBRARY...
Код:

#ifndef BMAP_H
#define BMAP_H

#include <QGraphicsView>
#include "canvlib_global.h"

class CANVLIB_EXPORT BMap : public QGraphicsView
{
public:
    BMap( QWidget * parent = 0 );
    ~BMap();

private:

};

#endif // BMAP_H

Получил ДЛЛ с ЛИБом. Подключаю ЛИБ к проекту....
Пишу строки в коде:
Код:

BMap *map = new BMap(this);
map->show();

Компилируется, линкуется... Но потом при старте приложения говорит "Не найдена точка входа"
Что делать?
____________________
Имею QT 4.2 + VS2005
Записан
Maxz
Гость
« Ответ #1 : Октябрь 18, 2006, 14:38 »

Цитата: "BaltikS"
Как правильно создать класс (например QMyWidget) и запихнуть его в ДЛЛ... И как правильно этот виджет вызвать?


Глянь в примерах examples/tools/plugandpaint и examples/tools/plugandpaintplugins - там что-то подобное сделано.
Записан
BaltikS
Гость
« Ответ #2 : Октябрь 18, 2006, 15:04 »

Спасибо, глядел, это подключение плагина........
На самом деле всё получилось, как описано выше.... Только с пересозданием проекта.... Глюк наверное VS...
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Октябрь 18, 2006, 18:31 »

обычно всякие макросы типа DLL_EXPORT пользуют
Записан
Lion
Гость
« Ответ #4 : Октябрь 18, 2006, 22:54 »

Цитата: "Admin"
обычно всякие макросы типа DLL_EXPORT пользуют

А в Qt есть готовый макрос?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Октябрь 19, 2006, 07:56 »

нет, так как это специфично для каждой платформы

в Windows DLL_Export

в Linux вообще не надо

так что сам заведи макрос и в путь
Записан
nikolai98
Гость
« Ответ #6 : Октябрь 21, 2006, 00:52 »

Хелп, помогите.... Как сделать динамическую библиеотеку с классом от QWidget, так как написоно в первом сообщении, но для Qt 3... Весь ассистент перечитал, все варианты про переписал... Не получается... Либо создаётся LIB, либо DLL.... Либа линкуется только статически... Хелп...если можно на примере....
Записан
Dendy
Гость
« Ответ #7 : Октябрь 21, 2006, 08:48 »

MyWidget.h
Код:

#prama once

#include <QWidget>

#if defined Q_WS_WIN
# ifdef MYWIDGET_STATIC
# define MYWIDGET_EXPORT
# else
# ifdef MYWIDGET_BUILD
# define MYWIDGET_EXPORT __declspec(dllexport)
# else
# define MYWIDGET_EXPORT __declspec(dllimport)
# endif
# endif
#else
# define MYWIDGET_EXPORT
#endif

// define MYWIDGET_STATIC - when MyWidget sources appended directly to the project
// define MYWIDGET_BUILD - when MyWidget builds as DLL
// no define needed, when MyWidget linked dynamicaly to the project from DLL

class MYWIDGET_EXPORT MyWidget : public QWidget
{
  Q_OBJECT

public:
  MyWidget( QWidget * parent = 0 );

// some useful code here
};



MyWidget.cpp
Код:

#include "MyWidget.h"

MyWidget::MyWidget( QWidget * parent ) :
  QWidget( parent )
{
  ...
}

...
// MyWidget methods definitions



MyWidget.pro // for DLL building
Код:
TEMPLATE = lib
DEFINES += MYWIDGET_BUILD
SOURCES = MyWidget.cpp
HEADERS = MyWidget.h
Записан
nikolai98
Гость
« Ответ #8 : Октябрь 21, 2006, 09:19 »

Dendy, спасибо за код, только он очень похож на DLL собранную в Qt4, а нужно для Qt3.... Ещё забыл упомянуть, что библиотеки надо собирать не только в Windows, но и в Linux... Извините за некоторый тупизм, но моих знаний никак не хватает Улыбающийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Октябрь 21, 2006, 09:25 »

смотри тут

#if defined Q_WS_WIN
Записан
nikolai98
Гость
« Ответ #10 : Октябрь 21, 2006, 09:59 »

В результате сборки я получил опять статическую LIB! А мне нужно DLL!!!!! и эту ДЛЛ потом подключать к другим проектам. А полученая ЛИБ линкуется опять только статически!!!
Записан
Dendy
Гость
« Ответ #11 : Октябрь 21, 2006, 12:25 »

ВсмьІсле статически линкуется с либами Qt? Или DLL вообще нет? Может забьІл дописать в проект:

Код:
TEMPLATE = lib
CONFIG += dll
Записан
nikolai98
Гость
« Ответ #12 : Октябрь 21, 2006, 13:12 »

Слушай, ты гений! Тебе надо памятник поставить.... Огромное спасибо!
Записан
Lion
Гость
« Ответ #13 : Октябрь 27, 2006, 14:47 »

Сделал как написано, получил dll, а как теперь научить другие проекты ею пользоваться? При компиляции сплошные ошибки типа этой:
Код:

Error 15 error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QString const __thiscall ErrorHandler::message(void)const " (__imp_?message@ErrorHandler@@QBE?BVQString@@XZ) referenced in function "public: virtual bool __thiscall IqAuth::hookElement(class QDomElement *)" (?hookElement@IqAuth@@UAE_NPAVQDomElement@@@Z) iqauth.obj
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #14 : Октябрь 27, 2006, 14:51 »

все экспортируем функции должны быть обьявлены как __declspec(dllexport)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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