Интересно все что касается данной темы. Каких правил необходимо придерживаться для создания оной? Какой набор функций используется обычно? Может есть у кого какие исходники? Приемлимыми являются исходники на ASM/C/C++/C#. Исходники плагинов и СДК попрошу не предлагать. Важна идея.
Порсмотри RadAsm там это дело описано, есть примеры плагинов. Из всего этого можно в примерно нарисовать свою систему плагинов.
Всё что угодно может быть. И реализовано как угодно. Как делать - зависит от специфики проги. Плагины могут быть расширяющими функционал, а могут просто использовать движок проги в своих целях. Что и сколько высовывать наружу из проги - зависит от фантазии и необходимости.
Имхо, 2 лучшие реализации плагинов (касаюсь тока Винды, ибо в *НИКСах я дуб): 1) Через .ЕХЕ-ники с чётко фиксированой VERSIONINFO (например, засунуть туда несколько заранее определённых строковых параметров). Немного гиморно, но позволяет не привязываться к версии самой проги. 2) Через .DLL-ки. Связывание статическое или динамическое (я любитель второго пути, но если оч. большой список экспортируемых функций - то лучше первое, ибо ест меньше памяти и работает быстрее). Оч хорошая ссылка на эту тему - организация плагинов в Miranda IM (2-ой способ). Советую посмотреть: http://www.xakep.ru/magazine/xa/073/112/1.asp
LordBublicXIII Какое отношение имеет versioninfo к плагинам? И можно ли назвать plug-in'ом модули, статически связанные с самой прогой?
1) VersionInfo может содержать произвольные текстовые константы. Кто мешает вставить туда такие : PluginName, Author, Version, Diescription (это в-принципе не обязательно, ибо есть заранее заданные строки такого рода), а также ProgramVersion (версия проги, для которой идёт плагин), MainFunctionName, ... (дополнить по желанию) 2) АБИСНЮ, что я имею ввиду под статическим / динамическим связыванием в отношении плагина. Пусть мы имеем прогу и плагин-DLL, которому необходимо использовать некоторые переменные / функции программы. Как плагину узнать их адреса? Если прога сама юзает некоторую ДЛЛ-ку, то можно использовать стандартное LoadLibrary/GetProcAddress. Если же всё находится внутри проги, можно пойти двумя путями: а) Использовать процедуру, вызываемую из экзешника и возвращающую адреса (наподобие предыдущего варианта) - это динамическое связывание; 2) Можно просто с прогой поставлять некий .TXT-файл (можно .INC или что-либо в этом роде), в котором будут названия нужных функций, переменных и констант, адреса всего этого - это статическое связывание. Типа специально для разработчиков плагинов.Работает оно быстрее и памяти ест меньше, но тогда плагин будет привязан к конкретной версии и билду проги. Между делом, тут можно и использовать VersionInfo, дабы прога ни в коем разе не подгрузила плагин, написанный не под ту версию.