crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Как вызвать из плагина функцию приложения?
mva
  опции профиля:
сообщение 17.9.2010, 22:03
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Добрый день!

Никак не могу найти в документации описание того, как правильно из плагина вызывать метод класса основного приложения. У меня выдается сообщение об ошибке "...: symbol lookup error: ... : undefined symbol: ... ". Может кто подскажет как это делается или где искать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 21.9.2010, 11:26
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Написал тестовый пример имитирующий проблему (переделанный стандартный пример из поставки Qt). Сам пример, конечно, не самый элегантный, но все проблемы и возможные способы решения он показывает.

Сам пример в приложении. Предлагаю его в том виде, когда он даст ошибку на этапе исполнения, как раз то о чем говорит mva

Я расширил стандартный пример неким классом SharedUtils который находится в файле shared_utils.* Этот код компилируется вместе с приложением.
А теперь возникает ситуация, что этот функционал, который предоставляет SharedUtils, необходим не только приложению, но и плагину. Тот код, который я приложил, удачно скомпилируется (и приложение даже запустится), но при нажатии на кнопку произойдет ошибка, и в общем понятно почему.

Я ранее еще предложил три пути решения этой проблемы
1. Включить shared_utils.* в компиляцию плагина. Модифицируем plugin pro
HEADERS         = echoplugin.h \
                  ../echowindow/shared_utils.h
SOURCES         = echoplugin.cpp \
                  ../echowindow/shared_utils.cpp
И, ву а ля, все работает. Но это не хорошо. Т.о. мы просто продублировали функционал. Если у нас появятся статические данные, будут проблемы, т.к. статическая переменная в приложении и в плагине - это две совершенно разные переменные.

2. Выделить общий код в разделяемую библиотеку (.dll/.so). (У меня в проекте сделано именно так)

3. GCC visibility. Добавляем в файл проекта приложения следущую строку
QMAKE_LFLAGS += -Wl,-export-dynamic -fvisibility=hidden


И помечаем класс следующим образом
class __attribute__ ((visibility ("default"))) SharedUtils
{
    ....
}
Всё, этого вполне достаточно.
Прикрепленные файлы
Прикрепленный файл  echoplugin.zip ( 5,11 килобайт ) Кол-во скачиваний: 130
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- mva   Как вызвать из плагина функцию приложения?   17.9.2010, 22:03
- - igor_bogomolov   Ну, видимо, у меня используется подобная архитекту...   18.9.2010, 0:33
- - Litkevich Yuriy   если я правильно понимаю происходящее, то проблема...   18.9.2010, 8:44
- - SABROG   Цитата(mva @ 17.9.2010, 23:03) Никак не м...   20.9.2010, 11:05
- - wiz29   Думаю, правльно былобы иметь некий интерфейс, реал...   20.9.2010, 12:28
|- - mva   Цитата(wiz29 @ 20.9.2010, 13:28) Думаю, п...   21.9.2010, 8:42
- - Litkevich Yuriy   приведи код интерфейса и код использования в плаг...   21.9.2010, 9:33
- - SABROG   Цитата(mva @ 21.9.2010, 9:42) Но вопрос в...   21.9.2010, 11:15
- - igor_bogomolov   Написал тестовый пример имитирующий проблему (пере...   21.9.2010, 11:26
- - mva   Извиняюсь, не указал важную деталь и возможно ввел...   21.9.2010, 11:49
|- - wiz29   Цитата(mva @ 21.9.2010, 12:49) Извиняюсь,...   21.9.2010, 12:09
- - igor_bogomolov   Т.е. падение происходит когда приложение испускае...   21.9.2010, 12:06
- - mva   Вот код плугина searchparameters.h Раскрывающийся...   21.9.2010, 23:02
- - igor_bogomolov   Видимо в файле проекта плагина отсутствуют следущи...   22.9.2010, 2:25
- - mva   Все, проблему решил простейшим образом. CODE void...   22.9.2010, 9:50


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.12.2024, 13:05