Архитектура плагинной системы

Тема в разделе "WASM.WIN32", создана пользователем spn_dd, 14 июл 2006.

  1. spn_dd

    spn_dd New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    22
    Адрес:
    Ukraine
    Интересно все что касается данной темы.
    Каких правил необходимо придерживаться для создания оной?
    Какой набор функций используется обычно?
    Может есть у кого какие исходники? Приемлимыми являются исходники на ASM/C/C++/C#.
    Исходники плагинов и СДК попрошу не предлагать. Важна идея.
     
  2. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    Порсмотри RadAsm там это дело описано, есть примеры плагинов. Из всего этого можно в примерно нарисовать свою систему плагинов.
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Всё что угодно может быть. И реализовано как угодно. Как делать - зависит от специфики проги. Плагины могут быть расширяющими функционал, а могут просто использовать движок проги в своих целях. Что и сколько высовывать наружу из проги - зависит от фантазии и необходимости.
     
  4. LordBublicXIII

    LordBublicXIII Андрей

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    10
    Имхо, 2 лучшие реализации плагинов (касаюсь тока Винды, ибо в *НИКСах я дуб):
    1) Через .ЕХЕ-ники с чётко фиксированой VERSIONINFO (например, засунуть туда несколько заранее определённых строковых параметров). Немного гиморно, но позволяет не привязываться к версии самой проги.
    2) Через .DLL-ки. Связывание статическое или динамическое (я любитель второго пути, но если оч. большой список экспортируемых функций - то лучше первое, ибо ест меньше памяти и работает быстрее).

    Оч хорошая ссылка на эту тему - организация плагинов в Miranda IM (2-ой способ). Советую посмотреть:
    http://www.xakep.ru/magazine/xa/073/112/1.asp
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    LordBublicXIII
    Какое отношение имеет versioninfo к плагинам? И можно ли назвать plug-in'ом модули, статически связанные с самой прогой?
     
  6. LordBublicXIII

    LordBublicXIII Андрей

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    10
    1) VersionInfo может содержать произвольные текстовые константы. Кто мешает вставить туда такие : PluginName, Author, Version, Diescription (это в-принципе не обязательно, ибо есть заранее заданные строки такого рода), а также ProgramVersion (версия проги, для которой идёт плагин), MainFunctionName, ... (дополнить по желанию)

    2) АБИСНЮ, что я имею ввиду под статическим / динамическим связыванием в отношении плагина. Пусть мы имеем прогу и плагин-DLL, которому необходимо использовать некоторые переменные / функции программы. Как плагину узнать их адреса? Если прога сама юзает некоторую ДЛЛ-ку, то можно использовать стандартное LoadLibrary/GetProcAddress. Если же всё находится внутри проги, можно пойти двумя путями:
    а) Использовать процедуру, вызываемую из экзешника и возвращающую адреса (наподобие предыдущего варианта) - это динамическое связывание;
    2) Можно просто с прогой поставлять некий .TXT-файл (можно .INC или что-либо в этом роде), в котором будут названия нужных функций, переменных и констант, адреса всего этого - это статическое связывание. Типа специально для разработчиков плагинов.Работает оно быстрее и памяти ест меньше, но тогда плагин будет привязан к конкретной версии и билду проги. Между делом, тут можно и использовать VersionInfo, дабы прога ни в коем разе не подгрузила плагин, написанный не под ту версию.