![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Я пишу для себя программку, цели в ней особой пока нет, в основном она будет использоваться мною как органайзер \ записная книжка и т.д.
Я составил маленькую карту, как я вижу архитектуру приложения: ![]() То есть система такова - есть некое ядро, которое висит в памяти, при выполнение некоторых операций, она загружает модули (реализация - DLL), и выполняет в загруженных модулях функцию со строго определенными параметрами - именем и т.п. (то есть система плагинов), но в систему входят еще и свои 2 модуля, которые являются базовыми для системы. Вопрос заключается вот в чем - могут ли подключенные модули вызывать функции ранее подключенных модулей ? Если да, то как ? Нужно подгружать динамическую библиотеку или (то есть могут ли быть стрелочки на схеме от подключаемых модулей к 2 системным модулям ?) Спасибо! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
hardcase |
![]()
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Я считаю, что так поступать не стоит. Это несколько противоречит принципу плагинов, а вот взаимодействие плагинов между собой - неплохая идея.
Если модули "системные" то использование их функций в плагинах должно быть регламентировано ядром, т.е. все такие вызовы должны быть проведены через ядро. Это, кстати, позволит в случае чего расширить ядро - вдруг количество "системных" модулей возрастёт. Сообщение отредактировано: hardcase - 13.04.2006 18:50 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Я считаю, что так поступать не стоит. Как именно ? Почему не стоит ? Цитата Это несколько противоречит принципу плагинов В чем противоречит ? Мне показалось, это и есть почти или совсем система плагинов. Цитата вот взаимодействие плагинов между собой - неплохая идея. Да, так вот вопрос чисто технический - могу я загрузив модуль один раз в ядре, и передав ему управление, в нем использовать функции уже подключенных ? Если да то каков механизм ? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
hardcase |
![]()
Сообщение
#4
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Как именно ? Почему не стоит ? Если у тебя есть Ядро, то оно пуп системы и системные вызовы лцчше осуществлять через него. Вызовы в обход ядра "череваты боком". Да, так вот вопрос чисто технический - могу я загрузив модуль один раз в ядре, и передав ему управление, в нем использовать функции уже подключенных ? Если да то каков механизм ? Но сначала нужно договориться об интерфейсах. Вызывающий плагин должен быть осведомлён об интерфейсе вызываемого. Думаю нужно создавать 2 базовых интерфейса: интерфейс ядра. через него будут происходить все вызовы функция ядра из плагина. Код IKernel = interface //то, что дозволяется плагину производить с ядром // кроме того список плагинов end; почему нельзя производить вызовы в обход ядра: к примеру ты произвёл некоторые изменения в ядре или изменил состав системных ДЛЛ. всё! придётся плагин исправлять и перекомпилировать - это есть нехорошо. а с интерфейсом просто - если ты его расширил, то это никак не скажется на уже готовом плагине. интерфейс плагина. при загрузке плагина ядро получает этот интерфейс и производит инициализацию плагина, сообщая ему свой интерфейс. Код IPlugin = interface procedure Initialize(Kernel: IKernel); end; взаимодействие плагинов: если вызывающий плагин осведомлён об интерфейсе вызываемого плагина (он может быть шире чем то, что известно ядру) то всё круто - вызываем методы напрямую. этому есьт альтернатива - посылка/приём плагинами команд - символьных или числовых констант (на этом основано взаимодействие с Winamp). это должно быть отражено в IPlugin соответствующими методами. З.Ы. хм. органайзер... кажется я сильно разошёлся ;-) -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Все, спасибо! Меня интересовала теория.. в принципе подумав, я решил, что реализовывать я это буду совсем не на Delphi...
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 13:30 |