Автор: Altair 13.04.2006 20:09
Я пишу для себя программку, цели в ней особой пока нет, в основном она будет использоваться мною как органайзер \ записная книжка и т.д.
Я составил маленькую карту, как я вижу архитектуру приложения:
То есть система такова - есть некое ядро, которое висит в памяти, при выполнение некоторых операций, она загружает модули (реализация - DLL), и выполняет в загруженных модулях функцию со строго определенными параметрами - именем и т.п. (то есть система плагинов), но в систему входят еще и свои 2 модуля, которые являются базовыми для системы.
Вопрос заключается вот в чем - могут ли подключенные модули вызывать функции ранее подключенных модулей ?
Если да, то как ? Нужно подгружать динамическую библиотеку или
(то есть могут ли быть стрелочки на схеме от подключаемых модулей к 2 системным модулям ?)
Спасибо!
Автор: hardcase 13.04.2006 22:46
Я считаю, что так поступать не стоит. Это несколько противоречит принципу плагинов, а вот взаимодействие плагинов между собой - неплохая идея.
Если модули "системные" то использование их функций в плагинах должно быть регламентировано ядром, т.е. все такие вызовы должны быть проведены через ядро. Это, кстати, позволит в случае чего расширить ядро - вдруг количество "системных" модулей возрастёт.
Автор: Altair 14.04.2006 2:05
Цитата
Я считаю, что так поступать не стоит.
Как именно ?
Почему не стоит ?
Цитата
Это несколько противоречит принципу плагинов
В чем противоречит ? Мне показалось, это и есть почти или совсем система плагинов.
Цитата
вот взаимодействие плагинов между собой - неплохая идея.
Да, так вот вопрос чисто технический - могу я загрузив модуль один раз в ядре, и передав ему управление, в нем использовать функции уже подключенных ?
Если да то каков механизм ?
Автор: hardcase 14.04.2006 2:26
Цитата(Altair @ 13.04.2006 23:05)
Как именно ?
Почему не стоит ?
Если у тебя есть Ядро, то оно пуп системы и системные вызовы лцчше осуществлять через него.
Вызовы в обход ядра "череваты боком".
Цитата(Altair @ 13.04.2006 23:05)
Да, так вот вопрос чисто технический - могу я загрузив модуль один раз в ядре, и передав ему управление, в нем использовать функции уже подключенных ?
Если да то каков механизм ?
Можешь.
Но сначала нужно договориться об интерфейсах. Вызывающий плагин должен быть осведомлён об интерфейсе вызываемого.
Думаю нужно создавать 2 базовых интерфейса:
интерфейс ядра. через него будут происходить все вызовы функция ядра из плагина.
Код
IKernel = interface
//то, что дозволяется плагину производить с ядром
// кроме того список плагинов
end;
почему нельзя производить вызовы в обход ядра: к примеру ты произвёл некоторые изменения в ядре или изменил состав системных ДЛЛ. всё! придётся плагин исправлять и перекомпилировать - это есть нехорошо. а с интерфейсом просто - если ты его расширил, то это никак не скажется на уже готовом плагине.
интерфейс плагина. при загрузке плагина ядро получает этот интерфейс и производит инициализацию плагина, сообщая ему свой интерфейс.
Код
IPlugin = interface
procedure Initialize(Kernel: IKernel);
end;
взаимодействие плагинов:
если вызывающий плагин осведомлён об интерфейсе вызываемого плагина (он может быть шире чем то, что известно ядру) то всё круто - вызываем методы напрямую.
этому есьт альтернатива - посылка/приём плагинами команд - символьных или числовых констант (на этом основано взаимодействие с Winamp). это должно быть отражено в IPlugin соответствующими методами.
З.Ы. хм. органайзер... кажется я сильно разошёлся ;-)
Автор: Altair 15.04.2006 2:39
Все, спасибо! Меня интересовала теория.. в принципе подумав, я решил, что реализовывать я это буду совсем не на Delphi...