ещё забыл уточнить: кто убивает объект? в твоём "наброске" объект вообще бессмертен...
я пока додумался только реализовать ф-ю противоположную void MyModuleCreate() и называться будет void MyModuleDestroy()
давай тогда пойдём от обратного? - что _конкретно_ тебе требуется реализовать?
... если бы я знал...
а серьезно - я хочу написать некое приложение (GPL) , наподобие SCADA... Оно бучет состоять из различных подсистем.. Каждая подсистема будет заниматься своим делом... Управлять подсистемами будет "ядро" ... Так вот, суть работы SCADA системы в кратце - сбор данных от различных источников, их обработка, архивирование и т.п. и. т.д. Источники могут быть различные, например PLC, цифровые преобразователи (датчики), сервера, раб станции и все что угодно... Чтобы поиметь с них информацию - SCADA системе нужно знать что за источник и как с ним общаться.... т.е знать протокол обмена с неким девайсом...
так вот, я могу впринципе все это реализовать без всяких плагинов, а чисто как некую подсистему приложения которая будет неотделима от него... но это не есть гут... поэтому я думаю эту подсистему вынести в отдельный модуль...
Например для начала хочу реализовать (как самое простое) некий модуль , который подключается к приложению и реализует протокол Modbus RTU... т.е этот модуль (после его подключения к приложению и его регистрации) должен позволять делать с ним следующее:
1. Стартовать его.
2. Останавливать
3. Конфигурировать
4. Получать его статус , а также статусы его "подмодулей"
Модуль должен в зависимости от того как он сконфигурирован, САМ опрашивать источники данных (девайсы), вести статистику, БД и т.п. и. т.д..
А само приложение может получать нужные другим подсистемам данные от этого загруженного модуля посредством определенного API .. т.е приложению не нужны в принципе указатели на объекты в модуле... Ему нужны только АПИ!!! (я так пока предварительно решил)
Вот я сам и в растерянности как мне поступить.. либо использовать QLibrary либо QPluginLoader
Я пока предварительно решил QPluginLoader использовать... а API реализовать через интерфейсы!!! Вот я поэтому и напираю на это
1. У вас в программе есть некий интерфейс, реализацию которого можно подменить. Это обычный класс, от других ничем не отличается. Будете вы писать наследники этого интерфейса непосредственно у себя в программе, или выненесете их во внешнюю динамическую библиотеку - программе от этого ни холодно, ни жарко. Ей сунули указатель на обьект, она с ним поработала, удалила.
Ну в принципе сам модуль будет представлять из себя класс!!! Просто тут дилема, как его использовать..
я пока и сам не понял чего хочу, поэтому пытаюсь понять идею!
2. Внимание, подмена понятий! То что называется интерфейсом плагина (MyModuleInterface у вас) - это не обьект, который вы будете подменять. Это синглтон для получения обьектов из динамической библиотеки.
ну ДА! Я и не говорил что это объект, объектом в моем случае является MyModule и наверное MyModulePlugin
просто мне непонятен один момент, почему везде в примерах пишут:
class MyModulePlugin : public QObject,
public MyModuleInterface
а не к примеру :
class MyModulePlugin : public QThread, //!!!!!!!!!!!!!!!!!!!!!!!
public MyModuleInterface
т.е почему вместо QObject, нельзя подставить другой класс какой нибудь..
ведь сразу можно было б тогда к примеру не реализовывать MyModule, а весь код написать в MyModuleInterface ...
Или меня опять не туда понесло?