![]() |
|
Модераторы: bsa |
![]()
|
|
| vase |
|
||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.7.2008 Репутация: нет Всего: нет |
Написал программу, использующу плагины (код класса для загрузки плагина взят с какого-то сайта).
Все работает - проблем нет. Но вызов функции из класса работает только тогда, когда она объявлена была ранее как virtual в файле plugin.h класса PlugIn Можно ли как-то обойтись без объявления функции или нет? Хочется иметь возможность загрузить из библиотеки любую функцию и получить результат... Библиотека подгружается след образом:
сам код плагина
Это сообщение отредактировал(а) vase - 18.8.2008, 11:59 |
||||||||||||||
|
|||||||||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
вообще-то я не очень понимаю, зачем тебе загружать методы класса? Класс как таковой бесполезен без объявления...
Если тебе требуется загружать из плагина объект некоего класса, то этот класс должен быть потомком метакласса, объявление которого известно основной программе, и виртуальные методы переопределены в плагине... Но тут возникает сложность с компиляторами, так как вряд ли будет работать плагин написаный на компиляторе Mingw с программой, созданной в VC... |
|||
|
||||
| vase |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.7.2008 Репутация: нет Всего: нет |
То есть в плагин лучше пихать только функции и никаких классов? Тогда не придется их объявлять ранее ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Ну... вообще-то придется, иначе как их ты будешь использовать? Тут смысл такой, что из плагина ты получаешь несколько заранее известных функции, например: init, process и quit. Первая, допустим, возвращает некий указатель. process - вызывает обработку данные (ему передается указатель), а quit - освобождает память, которая была выделена при инициализации. А вот внутри process, init и quit ты можешь использовать все что угодно. И указатель может указывать на объект класса - из основной программы напрямую обращений к нему нет. |
|||
|
||||
| vase |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.7.2008 Репутация: нет Всего: нет |
А как тогда делать если надо вызывать разные функции клиентом? Например, у меня есть приложение которое может создавать и удалять пользователей, а также запускать и останавливать сервисы на сервере. Я клиентом передаю команду, например users delete petya сервер получил команду, загружает библиотеку , которая отвечает за функции с пользователями (например users.so). Далее мне надо вызвать что-то типа process(char *command) , а уже в функции process у меня должен быть switch (command) ..... так ? Это сообщение отредактировал(а) vase - 18.8.2008, 13:08 |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
угу
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |