Witam. Chcę sobie zrobić pluginy w aplikacji. Chcę aby każdy plugin dodawał do menu głównego jakąś pozycję, która robi różne rzeczy, np. wyświetla sobie QWidgeta( w którym to implementuje różną funkcjonalność) jako okno MDI . Ogólnie chciałem zrobić "zwykłą" QTową dll w której umieszczam sobie klasę customQWidget, a w głównym programie rzucam ją na QWidget i wywołuję metodę show() ... Tak jakoś to widzę. Ale oczywiście teoria ma się nijak do praktyki. Zrobiłem sobie DLL :
#include "DLLTest_global.h"
#include <QMessageBox>
#include <QDebug>
extern "C" DLLTESTSHARED_EXPORT void foo();
------------------------------------------------------------------------------
#include "dlltest.h"
extern "C" DLLTESTSHARED_EXPORT void foo()
{
QMessageBox::information(0, "asdfasf", "asfasfd");
}
A to jest kod z pushButtona:
void MainWindow::onPushBtnClicked()
{
typedef void (*f)();
f funkcja;
QLibrary lib("DLLTest.dll");
funkcja = (f)lib.resolve("foo");
if(funkcja) funkcja(); <<<<<< uporczywa linijka ....
}
Teraz - gdy w funkcji foo() wpiszę sobie qDebug() << "blabla " ; to wszystko działa, natomiast gdy chcę aby wyświetlił mi się MessageBox, to mam naruszenie ochrony pamięci.
Proszę tylko o jakieś naprowadzenie co robię (myślę) źle. Chcę tylko wywołać klasę customQWidget z DLL i dodać te menu, żeby móc rozszerzyć funkcjonalność.