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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как сделать DLL  (Прочитано 16412 раз)
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.033 секунд. Запросов: 22.