Название: Доступ к основному окну из плагина Отправлено: ExMagistr от Июнь 30, 2009, 12:59 Всем доброго времени суток!
Хочу написать приложение, расширяемое плагинами, в том числе дать доступ плагинам к элементам интерфейса основного окна, например к элементам ввода, меню и т.п. Во время выполнения, в момент вызова метода плагина, программа валится с ошибкой. Для тестового примера: Метод плагина: Код: void Plugin::writeString(MainWindow* win) Код: symbol lookup error: /home/proffa/qt/testplugin/bin/plugin/libplugin.so: undefined symbol: _ZN10MainWindow9getEditorEv Кто нибудь может подсказать, что не так сделано, и возможно ли вообще реализовать подобную идею? Может как-нидь по другому, не через плагины? Заранее спасибо. P.S.: работаю под Ubuntu 9.04, Qt 4.5.1, исходники тестового пример: http://narod.ru/disk/10435014000/testplugin.zip.html Название: Re: Доступ к основному окну из плагина Отправлено: Rcus от Июнь 30, 2009, 13:25 /* Размышляет о работае компоновщика(линкера) и понимает как это неблагодарный труд... работаешь работаешь а о тебе никто не знает */
Прочитайте контракт с другой стороны: ваше приложение знает о плагинах, а как плагины узнают о приложении? Название: Re: Доступ к основному окну из плагина Отправлено: Alex Custov от Июнь 30, 2009, 13:29 плагин использует определение класса MainWindow, но не линкуется с его реализацией. По умолчанию многие линкеры позволяют оставлять undefined символы в библиотеке. Вставь
Цитировать QMAKE_LFLAGS += -Wl,--no-undefined в plugin.pro, и плагин перестанет компилироваться с такой же ошибкой. Нужно общий код, используемый программой и плагином (в данном случае класс MainWindow) выделить в одну библиотеку типа libMyProgramCommon, и линковать с ней и программу и плагин. Название: Re: Доступ к основному окну из плагина Отправлено: BRE от Июнь 30, 2009, 13:34 Добавь в файл проекта самой программы:
QMAKE_LFLAGS += -Wl,-export-dynamic Название: Re: Доступ к основному окну из плагина Отправлено: SABROG от Июнь 30, 2009, 14:26 Раз пошла такая пьянка по форумам отвечать 2 раза, то и я свои 5 копеек внесу :)
Код
Название: Re: Доступ к основному окну из плагина Отправлено: ExMagistr от Июнь 30, 2009, 14:28 Спасибо за быстрый ответ :)
В свое оправдание хочу сказать, что имею лишь интуитивное понимание работы компоновщика\линкера и вообще всяких внутренних процессов и поэтому доля безграмотности проникла в мой вопрос :( - я наивно надеялся, что раз передаю указатель на участок памяти, значит получаю к нему полный доступ.... Добавь в файл проекта самой программы: Спасибо, для тестового примера помогло :) теперь, если что, понятно, в какую сторону смотретьQMAKE_LFLAGS += -Wl,-export-dynamic Название: Re: Доступ к основному окну из плагина Отправлено: SABROG от Июнь 30, 2009, 14:29 Может тогда кто-нибудь выложит ключики и для MSVC?
Название: Re: Доступ к основному окну из плагина Отправлено: ExMagistr от Июнь 30, 2009, 14:35 Раз пошла такая пьянка по форумам отвечать 2 раза, то и я свои 5 копеек внесу :) Ну я просто, чтоб наверняка, в двух форумах тему завел :)Код
Теперь целых два рабочих варианта :) ну уж если теперь кто-нибудь не сочтет за труд подвести теоретическое обоснование корректности каждого из них :) ну да же если и нет, теперь знаю про что теорию копать :) Название: Re: Доступ к основному окну из плагина Отправлено: SABROG от Июнь 30, 2009, 14:39 Да это популярная тема (http://www.google.ru/search?hl=ru&newwindow=1&q=dll+%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B+%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+virtual&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq=) на самом деле.
|