Russian Qt Forum
Ноябрь 25, 2024, 13:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: вызов функции класса из другого плагина  (Прочитано 2303 раз)
Григорий
Гость
« : Июнь 13, 2015, 16:46 »

 Уважаемые форумчане не могу разобраться вот с такой проблемой, подскажите что не так...

Набросал тестовое приложение следующей архитектуры
 1) базовый бинарник  просто загружает в память все плагины из указанной директории и запускает функцию init у обоих плагинов
 2) 2 плагина (cначала грузится core потом plugin1)

при попытке вызвать в функции init второго плагина функцию класса первого плагина получаю ошибку
 
Код:
libplugin1.so: undefined symbol: _ZN5ICore10mainWindowEv

вот пример обоих плагинов
Код:
TEMPLATE = lib
CONFIG += plugin
QT += widgets

HEADERS  += core.h \
    icore.h

SOURCES += core.cpp \
    icore.cpp

OTHER_FILES += core.json
Код:
#ifndef CORE_H
#define CORE_H

#include <QObject>
#include "../plugin.h"

class Core : public QObject, Plugin {
    Q_OBJECT
    Q_PLUGIN_METADATA(IID Plugin_iid FILE "core.json")
    Q_INTERFACES(Plugin)

    void init();
};

#endif // CORE_H
Код:
#ifndef ICORE_H
#define ICORE_H

#include <QMainWindow>

class Q_DECL_EXPORT ICore :public QObject {
    Q_OBJECT
public:
    explicit ICore(QMainWindow *mw);
    static QMainWindow *mainWindow();
};

#endif // ICORE_H
Код:
#include "QMainWindow"
#include "icore.h"
#include "core.h"

void Core::init() {
    QMainWindow *mainwindow = new QMainWindow;
    new ICore(mainwindow);
    mainwindow->show();
}
Код:
#include "icore.h"

static QMainWindow *mainwindow;

ICore::ICore(QMainWindow *mw) {
    mainwindow = mw;
}

QMainWindow* ICore::mainWindow() {
    return mainwindow;
}
Код:
TEMPLATE = lib
CONFIG += plugin
QT += widgets

HEADERS  += plugin.h

SOURCES += plugin.cpp

OTHER_FILES += plugin.json
Код:
#ifndef PLUGIN1_H
#define PLUGIN1_H

#include <QObject>
#include "../plugin.h"

class Plugin1 : public QObject, Plugin {
    Q_OBJECT
    Q_PLUGIN_METADATA(IID Plugin_iid FILE "plugin1.json")
    Q_INTERFACES(Plugin)

    void init();
};

#endif // PLUGIN1_H
Код:
#include <QDebug>
#include "../core/icore.h"
#include "plugin1.h"

void Plugin1::init() {
    qDebug() << "init Plugin1";
    qDebug() << ICore::mainWindow();
}
Записан
AlFoX
Гость
« Ответ #1 : Июнь 14, 2015, 04:39 »

Попробуйте убрать Q_DECL_EXPORT
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Июнь 15, 2015, 21:32 »

а где код класса Plugin?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.