Название: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: fems от Апрель 08, 2014, 11:07 qt 5.2
Написал простейшую программу с подключением простейшего плагина с помощью QPluginLoader. Всё работает, всё хорошо. Не могу получить доступ из плагина (класса - реализованного от интерфейса) к объекту/классу, класс которого описан в основной программе. Пробовал создавать объект своего класса в самом интерфейсе, создал указатель в заголовочном файле, а в конструкторе создаю объект - всегда выскакивает ошибка Цитировать ....: symbol lookup error: .//../mod/libpluginA.so: undefined symbol: _ZN3OneC1Ev Для закрытия данного окна нажмите <ВВОД>... в коде One - это имя класса, остальное не понятно если объект не создаю, а указатель оставляю, всё работает задача стоит получить доступ к классу, не к объекту. Подскажите, что делаю не так, можно ли получить доступ к классам (объектам классов) программы из плагина? может этот момент решается другими путями Название: Re: QPluginLoader. Доступ к объекту главной программы из плагина Отправлено: Johnik от Апрель 08, 2014, 11:23 Для модуля можно сделать примерно такой интерфейс:
Код: class IPlugin и при создании модуля из главного приложения, вызывать pluginInit, где Host интерфейс вашего главного приложения Название: Re: QPluginLoader. Доступ к объекту главной программы из плагина Отправлено: fems от Апрель 08, 2014, 12:29 и при создании модуля из главного приложения, вызывать pluginInit, где Host интерфейс вашего главного приложения Так же ошибкаПри инициализации в pluginInit, объект host - это объект класса, интерфейса или чего именно, вот тут я утонул, перепробовал разные варианты, не идёт Инициализирую в главном так: Код: pI->pluginInit(this); Название: Re: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: Johnik от Апрель 08, 2014, 12:52 Инициализирую в главном так: модуль каким образом знает о this? как описан интерфейс?Код: pI->pluginInit(this); Название: Re: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: fems от Апрель 08, 2014, 13:21 вложил проект, обрезал до самого минимума, чтобы ничего не мешало
Тестирую на лине убунте, но проблем на винде не должно быть One - тестовый класс/объект к которому планируется получать доступ Сейчас рабочая версия, но если в plugina.cpp раскоментировать Цитировать qDebug() << parentHost->one->getTt(); то вылезет ошибкаНазвание: Re: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: Old от Апрель 08, 2014, 13:50 Тестирую на лине убунте Добавьте к флагам линкера для сборки ядра -export-dynamic, это позволит линкеру экспортировать символы программы и они станут доступны плагину.но проблем на винде не должно быть Будут. :)Лучше использовать такое разделение: main - основная программа core.dll - общие классы, которые должны использоваться и в main и в плагинах plagin_xxx.dll - все плагины, которые будут подключать себе core.dll Название: Re: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: Johnik от Апрель 08, 2014, 13:56 Сейчас рабочая версия, но если в plugina.cpp раскоментировать Цитировать qDebug() << parentHost->one->getTt(); то вылезет ошибкаРазберитесь с интерфейсами и реализацией: Код Зачем в интерфейс помещать поля: parentHost, и one, их надо вынести в реализацию, а интерфейс сделать таким: Код
соответственно parentHost(), one() и уйдут в реализацию, проблемы должны уйти Название: Re: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: fems от Апрель 08, 2014, 14:47 Зачем в интерфейс помещать поля: parentHost, и one, их надо вынести в реализацию, а интерфейс сделать таким: Не затруднит показать пример, не получается, теперь ругается в main-е, что класс Parser является абстрактным, видимо изза полей.соответственно parentHost(), one() и уйдут в реализацию, проблемы должны уйти чтото я не допонял Лучше использовать такое разделение: Именно этот способ стоял в очереди, но хотелось бы пробраться через плагин :)main - основная программа core.dll - общие классы, которые должны использоваться и в main и в плагинах plagin_xxx.dll - все плагины, которые будут подключать себе core.dll Название: Re: QPluginLoader. Доступ к классу главной программы из плагина Отправлено: fems от Апрель 08, 2014, 22:02 решил сделать по нормальному через библиотеку из которой буду брать классы
помогло http://www.prog.org.ru/topic_8259_0.html вопрос закрыт, всем спасибо ;) |