| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Разобраться с плагинами в программе |
| Автор: vase 18.8.2008, 11:56 | ||||||||||||||
| Написал программу, использующу плагины (код класса для загрузки плагина взят с какого-то сайта). Все работает - проблем нет. Но вызов функции из класса работает только тогда, когда она объявлена была ранее как virtual в файле plugin.h класса PlugIn Можно ли как-то обойтись без объявления функции или нет? Хочется иметь возможность загрузить из библиотеки любую функцию и получить результат... Библиотека подгружается след образом:
сам код плагина
|
| Автор: bsa 18.8.2008, 12:30 |
| вообще-то я не очень понимаю, зачем тебе загружать методы класса? Класс как таковой бесполезен без объявления... Если тебе требуется загружать из плагина объект некоего класса, то этот класс должен быть потомком метакласса, объявление которого известно основной программе, и виртуальные методы переопределены в плагине... Но тут возникает сложность с компиляторами, так как вряд ли будет работать плагин написаный на компиляторе Mingw с программой, созданной в VC... |
| Автор: vase 18.8.2008, 12:36 | ||
То есть в плагин лучше пихать только функции и никаких классов? Тогда не придется их объявлять ранее ? |
| Автор: bsa 18.8.2008, 12:46 | ||
Ну... вообще-то придется, иначе как их ты будешь использовать? Тут смысл такой, что из плагина ты получаешь несколько заранее известных функции, например: init, process и quit. Первая, допустим, возвращает некий указатель. process - вызывает обработку данные (ему передается указатель), а quit - освобождает память, которая была выделена при инициализации. А вот внутри process, init и quit ты можешь использовать все что угодно. И указатель может указывать на объект класса - из основной программы напрямую обращений к нему нет. |
| Автор: vase 18.8.2008, 13:03 | ||||
А как тогда делать если надо вызывать разные функции клиентом? Например, у меня есть приложение которое может создавать и удалять пользователей, а также запускать и останавливать сервисы на сервере. Я клиентом передаю команду, например users delete petya сервер получил команду, загружает библиотеку , которая отвечает за функции с пользователями (например users.so). Далее мне надо вызвать что-то типа process(char *command) , а уже в функции process у меня должен быть switch (command) ..... так ? |
| Автор: bsa 18.8.2008, 13:11 |
| угу |