Вот в таком духе примерно можно подключить библиотеку и работать с ней
Сброка плагина.pro
C++ (Qt)
TEMPLATE = lib
CONFIG += plugin
QT += network
TARGET = FileManager
SOURCES += getManager.cpp
HEADERS += getManager.h \
interfaceManager.h
unix: {
DESTDIR = /home/user/Qt/project/plugins
} else {
DESTDIR = ../EXE/project/plugins
}
interfaceManager.h
C++ (Qt)
#ifndef INTERFACEMANAGER_H
#define INTERFACEMANAGER_H
#include <QtGlobal>
class QStringList;
class interfaceManager
{
public:
virtual ~interfaceManager() {}
virtual void startClass(QStringList *lst) = 0;
};
Q_DECLARE_INTERFACE(interfaceManager, "www.interfaceManager/1.0")
#endif // INTERFACEMANAGER_H
getManager.h
C++ (Qt)
#ifndef GETMANAGER_H
#define GETMANAGER_H
#include "interfaceManager.h"
#include <QObject>
class QStringList;
class getManager : public QObject, public interfaceManager
{
Q_OBJECT
Q_INTERFACES(interfaceManager)
public:
getManager(QObject *parent = 0);
void startClass(QStringList *lst);
private:
QStringList *urls;
int counter;
void filesDowland();
private slots:
void slotReadyRead();
};
#endif // GETMANAGER_H
getManager.cpp
C++ (Qt)
#include "getManager.h"
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtCore/QUrl>
#include <QtCore/QtPlugin>
#include <QStringList>
getManager::getManager(QObject *parent) : QObject(parent){}
void getManager::startClass(QStringList *lst)
{
urls = new QStringList(lst);
counter = 0;
filesDowland();
return;
}
/** download files **/
void getManager::filesDowland()
{
//--Windows
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotReadyRead()));
manager->get(QNetworkRequest(QUrl( urls->at(counter) )));
return;
}
/** uploaded, on **/
void getManager::slotReadyRead()
{
counter++;
/** Actions with the file **/
if(counter < urls->count()) filesDowland();
return;
}
Q_EXPORT_PLUGIN2(getmanager, getManager)
Программа.pro
C++ (Qt)
TARGET = test
TEMPLATE = app
unix: {
DESTDIR = /home/user/Qt/project
} else {
DESTDIR = ../EXE/project
}
SOURCES += main.cpp
HEADERS += ../srcPugin/interfaceManager.h #interfaceManager.h Connect necessarily header interface plugin
main.cpp
C++ (Qt)
#include "../srcPugin/interfaceManager.h"
#include <QApplication>
#include <QObject>
#include <QPluginLoader>
#include <QStringList>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString libFile;
#if (defined(_WIN32) || defined(_WIN64))
libFile = "plugins/libFileManager.dll";
#else
libFile = "/home/user/Qt/project/plugins/libFileManager.so";
#endif
QPluginLoader loader(libFile);
loader.load();
QObject *plugin = loader.instance();
if(plugin)
{
interfaceManager *fileManager = qobject_cast<interfaceManager *>(plugin);
if(fileManager) {
QStringList *lst = new QStringList();
lst->append("http://url_1");
// ..........
lst->append("http://url_....");
fileManager->startClass(lst);
qDebug() << "Ok!!!";
} else
qDebug() << "No 2";
} else
qDebug() << "No 1";
return a.exec();
}
Правильно заданый вопрос - половина ответа.
"
Как экпортировать весь класс из DLL" если куда-то что-то отправляем то это экспорт, если берем то импорт, а экспорт "
ИЗ" не стыкуется как-то.
Я ответил на вопрос "
Как ИМПОРТИРОВАТЬ весь класс из DLL", или это не совсем то о чем спрашивалось?
--------------------------------------
В вложении немного другая реализация, там я проверялся как проще организовать сигнально слотовую связь, без лишних наследований и зависимостей, решение пришло после посещения форума
http://developer.qt.nokia.com/forumsВполне рабочее решение получилось