Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Приложение с плагинами на C++ Builder


Автор: ZVano 25.5.2011, 17:48
Предлагаю собрать в этом топике информацию по теме создания плагинистого приложения.
Нужны ссылки на статьи, туториалы, примеры, архивы с исходниками либо SVN|GIT|HG|иТД репозитории с готовыми проектами.
При выкладывании ссылки пишите краткий комментарий: название материалла; автор; языки программирования примеров; что описано в материале.

Тема будет полезна  для многих программеров среднего уровня.

Добавлено @ 17:52
Статья: http://www.codenet.ru/progr/visualc/plug.php
Автор: Покрашенко Александр
Язык: c++
Комментарий: Описывается как создать плагинистое приложение на любом С++. Использован подход "голые DLL"

Автор: borisbn 26.5.2011, 10:41
ZVano, тема полезная, но предлагаю расширить её - приводить примеры не только для Builder'а, а для любых систем.
если же оставить только Builder, то фразу
Цитата(ZVano @  25.5.2011,  17:48 Найти цитируемый пост)
Тема будет полезна  для многих программеров среднего уровня.

предлагаю переделать: ... для самых начинающих программеров самого низкого уровня. Всё-таки Builder - не профессиональная система (обрати внимание, не Delphi или VCL, а именно Builder).

Если согласен с расширением, то http://forum.vingrad.ru/index.php?showtopic=313032&view=findpost&p=2234028

Автор: ZVano 26.5.2011, 11:40
Цитата(borisbn @  26.5.2011,  10:41 Найти цитируемый пост)
приводить примеры не только для Builder'а, а для любых систем

Согласен. Только нужно к ссылке писать для какой системы приведен пример и является ли он спецефичным для этой системы (напр. чистые BPL в Delphi)
Шапку подправил.

Добавлено @ 11:51
Название: "Создаём систему плагинов"
Автор: Александр Алексеев
Язык программирования: Object Pascal
URL: 
http://www.gunsmoker.ru/2008/12/1.html - Обзор подходов. Выбор подхода.
http://www.gunsmoker.ru/2008/12/2.html - В предыдущий раз мы рассмотрели несколько возможных вариантов для системы плагинов. Самое время заняться реализацией.
http://www.gunsmoker.ru/2008/12/3.html - Прежде чем переходить к реализации нашей функции _Init, пощупаем сначала эти "пакеты в виде DLL".
http://www.gunsmoker.ru/2008/12/4.html - В прошлый раз мы немного пощупали "пакеты в виде DLL" и реализовали недостающие части функций инициализации в таком плагине.
http://www.gunsmoker.ru/2008/12/5.html - Самое время поговорить о серверной части. А начнём мы с загрузки плагинов.
http://hhttp://www.gunsmoker.ru/2008/12/6.html - Настало время обсудить наш интерфейс IInit. Как вы помните, ранее мы не говорили, что это такое - пока мы считали это "неким классом", у которого есть методы Init и Done.
http://www.gunsmoker.ru/2008/12/7.html - При декларации интерфейса IInit мы описали его методы как safecall вместо ожидаемого stdcall.
http://www.gunsmoker.ru/2008/12/8.html -  В последний раз мы полностью закончили рассмотрение загрузки плагинов. Теперь поговорим о самом вкусном - о функциональности плагинов.
http://www.gunsmoker.ru/2009/01/9.html - Прежде, чем приступать к написанию кода, хотелось бы сказать несколько слов о важных моментах, касающихся разработки плагинов, которые остались за бортом.

Описание: Цикл статей в котором рассматриваются различные подходы создания плагинистых приложений в IDE Delphi.
Автор выбрал подход "BPL, как DLL" и в дальнейшем реализовывает его.

Автор: ZVano 26.5.2011, 13:04
Цитата(borisbn @  26.5.2011,  10:41 Найти цитируемый пост)
Если согласен с расширением, то вот примерчик

Пример отсутствует на указаном ресурсе :(

Автор: borisbn 26.5.2011, 13:16
ууупс. Яндекс удалил. Вот. скопировал сюда

Автор: borisbn 26.5.2011, 13:17
а вот пример использования

Автор: ZVano 26.5.2011, 16:32
borisbn, а можно поподробнее о каркасе "Mosaic"?
Что за зверь, чьих рук творение, привязан ли жестко к QT?

Автор: borisbn 26.5.2011, 16:43
Цитата(ZVano @  26.5.2011,  16:32 Найти цитируемый пост)
Что за зверь, чьих рук творение

этот проект делали три человека на нашей фирме: один программист и два архитектора ( я в том числе ). Делали пару лет ( сначала на дебилдере, потом на Qt ). Т.к. это коллективный труд, то исходники выложить не могу.

Цитата(ZVano @  26.5.2011,  16:32 Найти цитируемый пост)
привязан ли жестко к QT?

К QuickTime'у - нет, а к Qt - да smile
На самом деле привязан только основной движок. Модули же (плагины) привязываются только если они собираются инсталлировать свой widget в систему (тут никуда не денешься). А если модуль просто обрабатывает данные, генерит их, читает/пишет файлы, общается по сети - то нет, не привязан.

Автор: ZVano 26.5.2011, 17:19
Цитата(borisbn @  26.5.2011,  16:43 Найти цитируемый пост)
Т.к. это коллективный труд, то исходники выложить не могу.

Это правильно.

На первый взгляд архитектура хорошо продумана. Но маленьким я бы каркас не назвал smile

Автор: ZVano 7.6.2011, 11:19
Название: "Плагины на основе COM интерфейсов"
Автор: Роман Лут (программист графического движка и дизайнер уровней 3D шутера Venom)
Язык программирования: Object Pascal, VC++, Borland С++ Builder, Managed C++, C#
URL: 
http://www.dtf.ru/articles/read.php?id=44995
http://www.deep-shadows.com/hax/downloads/cominterface.rar
Описание: Описывается принцип создания плагинистого приложения на базе COM интерфейсов.
Вроде, принцип применим для любых средсв разработки, которые могут работать с dll.
Статья тежелая для понимания.

Автор: fish9370 13.6.2011, 23:18
в линуксе практикуют два способа при загрузке подключаемых модулей:

1) после загрузки динамического модуля, производится попытка разрешить (resolve) символы интерфесы, затем в случае успеха, производится вызов интерфейса, с целью получения информации о  модуле, и его дальнейшей регистрации в ядре

2) после загрузки динамического модуля автоматически выполняется специальная функция в модуле (конструктор). При этом модуль получает доступ к списку модулей в ядре. Конструктор сам регистрирует себя.

второй способ мне кажется более предпочтительным, т.к. он более удобен.

в виндоуз реализован только первый способ (или я плохо информирован).


p.s. могу выложить исходники блокнота с плагинами (windows), если кому интересно..

Автор: ZVano 14.6.2011, 09:27
Цитата(fish9370 @  13.6.2011,  23:18 Найти цитируемый пост)
p.s. могу выложить исходники блокнота с плагинами (windows), если кому интересно..

Конечно интересно. Выкладывай.

Автор: fish9370 14.6.2011, 19:35
не могу залить исходник сюда (ограничение размера)

исходник лежит здесь: 'http://79.120.100.108/db-Editor v1.0.0.34 src alpha.rar'

написано все это в Borland Developer Studio 2006, C++ Builder
тестовый плагин лежит в папке plugin

с удовольствием отвечу на вопросы

Автор: ZVano 14.6.2011, 20:10
Цитата(fish9370 @  14.6.2011,  19:35 Найти цитируемый пост)
е могу залить исходник сюда (ограничение размера)

Удалил временные файлы и перезалил.
Спасибо за пример. С исходниками пока не разбирался. 
Выглядит симпатично. Сразу заметил решение ряда интересующих меня вопросов.

Автор: fish9370 14.6.2011, 22:32
прошу прощения, в файле Unit2.cpp, в строке 1482, после 
Код

memset(&HostInfo,0,sizeof(HostInfo));


пропущена строка
Код

HostInfo.hEditor = &hwndScintilla;


пожалуйста, добавьте

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)