Название: создаю DLL на QT Отправлено: break от Декабрь 23, 2007, 05:05 как правильно использовать макросы Q_EXTERN_C и Q_EXPORT, читал что они нужны чтобы заменить
extern "C" и __declspec(dllexport) если без макросов писать все компилится если с ними, то нет. Как правильно? Название: Re: создаю DLL на QT Отправлено: ритт от Декабрь 23, 2007, 05:10 #include <QtGlobal>
#define #ifdef Q_OS_WIN # ifdef CORELIB_BUILD # define CORE_EXPORT Q_DECL_EXPORT # else # define CORE_EXPORT Q_DECL_IMPORT # endif #endif #ifndef CORE_EXPORT # define CORE_EXPORT #endif соответственно, при сборке дллки дефайнишь CORELIB_BUILD, а при сборке другого бинаря, использующего данную длл, CORELIB_BUILD не дефайнишь Название: Re: создаю DLL на QT Отправлено: Вячеслав от Декабрь 23, 2007, 12:18 А именно DLL нужна или может в сторону плагинов посмотреть ?
Название: Re: создаю DLL на QT Отправлено: break от Декабрь 24, 2007, 13:16 сейчас сделал так:
в DLL.H Код: #include <qglobal.h> в DLL.CPP Цитировать #include <test_dll.h> #include <QDebug> int dllTest() { qDebug("100"); return 100; }; вроде работает, это хуже чем приведенный пример? Название: Re: создаю DLL на QT Отправлено: pastor от Декабрь 24, 2007, 14:40 вроде работает, это хуже чем приведенный пример? да хуже, правильные его вариант привел xep. Нет секции импорта для винды Название: Re: создаю DLL на QT Отправлено: break от Декабрь 24, 2007, 15:16 Сейчас эта библиотека линкуется динамически с пом. QLibrary.
секция импорта для винды нужна только при статической линковке? или в обоих случаях. Название: Re: создаю DLL на QT Отправлено: vaprele07 от Декабрь 25, 2007, 10:51 в темплейте ставишь lib в конфиг dll для <QtGlobal> и, или plugin если хочешь чтобы работали макросы <QtPlugin> и static для получения статистического модуля. В 4.4 они еще кучу макросов по напридумывали посфорвардинг, возможно исправили глюк с неймспайцем вокруг Q_DECLARE_INTERFACE ::)
Название: Re: создаю DLL на QT Отправлено: vregess от Декабрь 25, 2007, 20:39 кстати подобная тема уже обсуждалась http://prog.org.ru/forum/index.php/topic,6209.0.html
Название: Re: создаю DLL на QT Отправлено: Zmeishe от Декабрь 28, 2007, 15:43 Скопипастил решение сюда по просьбе xep (http://prog.org.ru/forum/index.php?action=profile;u=4679)
Для Винды нужно в каждой библиотеке сделать индивидуальный H-файл и объявить в нём директиву экспорта. Только одна библиотека и только одна директива. Т.е. нельзя директиву экспорта из одной библиотеки заюзывать в другую. Особенно если другая использует первую. Если посмотреть исходники Qt class Q_CORE_EXPORT QString ... для QtCore4.dll class Q_NETWORK_EXPORT QFtp ... для QtNetwork4.dll Разным модулям - разные директивы экспорта. Для программистов Windows это и так должно быть понятно. Для тех кто портирует библиотеки с Линукса в Винду это НЕ сразу понятно. Например, я не сразу сообразил, т.к. Линуксу до "лампады" эти директивы. /*mylibname.h Короткий H-файл для всех исходных модулей библиотеки*/ #ifndef __MYLIBNAME_H__ #define __MYLIBNAME_H__ #ifdef Q_OS_WIN # if defined( QT_BUILD_MYLIBNAME_LIB ) # define Q_MYLIBNAME_EXPORT __declspec(dllexport) # else # define Q_MYLIBNAME_EXPORT __declspec(dllimport) # endif #else # define Q_MYLIBNAME_EXPORT #endif #endif // __MYLIBNAME_H__ /*Классы для библиотеки объявлять так*/ #include "mylibname.h" class Q_MYLIBNAME_EXPORT MyClass {...}; /*В файл проекта библиотеки добавить */ win32 { DEFINES += QT_BUILD_MYLIBNAME_LIB } /*В файл проекта программы, использующей эту библиотеку */ win32 { DEFINES += QT_BUILD_MYLIBNAME_LIB } НЕ ДОБАВЛЯТЬ |