Прошу помощи, ибо не совсем опытный программист...
Основная ситуация:
Базовый класс и другие требуемые для работы классы описаны в одном проекте. Он компилируется с формированием *.dll. Другие проекты подключают эту длл-ку статически и классы, описанные в этих проектах наследуются от базового класса и собираются опять же с получением *.dll файла, который уже должен подгружаться в моём приложении.
Проблема:
При попытке подключить эту dll, к которой статически подключена другая dll QLibrary напрочь отказывается эту длл-ку подгружать.
-----------------------------------------------------------------------------
Локализовал проблему до таких простых проектов:
TestBaseClass.pro
TARGET = TestBaseClass
TEMPLATE = lib
CONFIG += dll
DESTDIR = ../include/dll/
SOURCES += main.cpp\
testbaseclass.cpp
HEADERS += testbaseclass.h
FORMS += testbaseclass.ui
TestBaseClass.h
#ifndef TESTBASECLASS_H
#define TESTBASECLASS_H
class TestBaseClass
{
public:
TestBaseClass();
~TestBaseClass();
};
#endif // TESTBASECLASS_H
TestBaseClass.cpp
#include "testbaseclass.h"
#include "ui_testbaseclass.h"
TestBaseClass::TestBaseClass()
{
}
TestBaseClass::~TestBaseClass()
{
}
-----------------------------------------------------------------
Теперь создаём второй проект, где будет дочерний класс
TestWidget2.pro
TARGET = TestWidget2
TEMPLATE = lib
CONFIG += dll
DESTDIR = ../include/dll/
SOURCES += main.cpp\
testwidget2.cpp
HEADERS += testwidget2.h
FORMS += testwidget2.ui
win32: LIBS += -L$$PWD/../include/dll/ -lTestBaseClass
INCLUDEPATH += $$PWD/../TestBaseClass
DEPENDPATH += $$PWD/../TestBaseClass
TestWidget2.h
#ifndef TESTWIDGET2_H
#define TESTWIDGET2_H
#include "testbaseclass.h"
class TestWidget2 : public TestBaseClass
{
public:
TestWidget2();
~TestWidget2();
};
extern "C" __declspec(dllexport)
{
TestBaseClass* createClass()
{
return new TestWidget2;
}
}
#endif // TESTWIDGET2_H
TestWidget2.cpp
#include "testwidget2.h"
#include "ui_testwidget2.h"
TestWidget2::TestWidget2() :
TestBaseClass()
{
}
TestWidget2::~TestWidget2()
{
}
Участок кода, которым пытаюсь подцепить библиотеку:
QLibrary* lib = new QLibrary(file_name);
if(!lib->load())
{
ui->textEdit->append(lib->errorString());
}
delete lib;
Текст выдаваемой ошибки:
Cannot load library D:\Work\ARM\include\dll\TestWidget2: Не найден указанный модуль.
Версия Qt 5.4.0, ОС Windows 7 32-бита, При компиляции всех проектов никаких ошибок не возникает, но всё равно библиотека не подцепляется.
Я не очень опытный программист, потому многого не понимаю в функционировании динамических библиотек и в данной ситуации немного впал в ступор.. Что я делаю не так?
PS: В силу специфики задачи QPluginLoader не подходит из-за того, что придется описывать интерфейсы, которые в дальнейшей работе придется часто редактировать и в каждом подгружаемом модуле описывать одни и те же методы.. Так что думаю в моей ситуации самым верным будет использовать именно QLibrary, но столкнулся и вышеописанной проблемой...