Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++. Модульное программирование

249
17 апреля 2006 года
DissDoc
639 / / 01.10.2004
Привет всем, кто необошел мою тему.
После некоторых экспериментов я пришел к выводу, что программа построенная на модулях в моих потребностях - это есть самый хороший выбор, т.к. обновлять проще модули, нежели пересобирать весь код.
Так вот вопрос в чем. Я не смог в инете найти уроки (или статьи) азы постороения программ, поддерживающих модули.
Как dll подключать в программе я знаю, но не знаю как сделать так, чтобы основную программу не трогать, а модули чтобы работали. Вот как реализоно это в фотошопе или 3дмаксе...
Есть ли у кого какая инфа по этому поводу?
395
17 апреля 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by DissDoc
Привет всем, кто необошел мою тему.
После некоторых экспериментов я пришел к выводу, что программа построенная на модулях в моих потребностях - это есть самый хороший выбор, т.к. обновлять проще модули, нежели пересобирать весь код.
Так вот вопрос в чем. Я не смог в инете найти уроки (или статьи) азы постороения программ, поддерживающих модули.
Как dll подключать в программе я знаю, но не знаю как сделать так, чтобы основную программу не трогать, а модули чтобы работали. Вот как реализоно это в фотошопе или 3дмаксе...
Есть ли у кого какая инфа по этому поводу?

Ты имеешь ввиду что-то типа плугинов?

249
17 апреля 2006 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by RelB
Ты имеешь ввиду что-то типа плугинов?


Да. Это по-моему одно и то же. (хотя различия тоже допускаю..) Но мне кажется это тоже самое. Просто в разных местах говорят по разному.

395
17 апреля 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by DissDoc
Да. Это по-моему одно и то же. (хотя различия тоже допускаю..) Но мне кажется это тоже самое. Просто в разных местах говорят по разному.

Самый простой способ - COM. Регистрируешь категорию... и создаешь объекты отсосящиеся к этой категории... Затем с помощью объекта StdComponentCategoriesMgr выбираешь то, что тебе нужно...

P.S. Если ничего не понятно :) Читай MSDN - COM Fundamentals - Component Categories Manager Implementation

249
17 апреля 2006 года
DissDoc
639 / / 01.10.2004
Твой совет мне ясен, а вот COM для меня загадкой остается, но видно от него никуда не деться )
395
17 апреля 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by DissDoc
Твой совет мне ясен, а вот COM для меня загадкой остается, но видно от него никуда не деться )

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

Можно будет писать плугинчики на всем что угодно...

P.S. COM - если его понять, очень простая и в то же время очень сильная вещь! :)

443
17 апреля 2006 года
REmindER
292 / / 23.03.2003
Механизм механизмом, а еще, как мне кажется, нужно продумать интерфейс взаимодействия с основной программой и модулями непосредственно. Именно с этой задачи и стоит начать.
249
19 апреля 2006 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by REmindER
Механизм механизмом, а еще, как мне кажется, нужно продумать интерфейс взаимодействия с основной программой и модулями непосредственно. Именно с этой задачи и стоит начать.


Я более менее продумал уже сам интерфейс взаимодействия с плагинами (уже вторую неделю изучаю свою проблему).
И якопаю в сторону что должна быть определенная (в программе определнная) функция, которая читала бы данные из плагина. Я не могу точно написать словами (но короче хочу использовать def-файлы для видимости функций)

443
19 апреля 2006 года
REmindER
292 / / 23.03.2003
Цитата:
Originally posted by DissDoc
Я более менее продумал уже сам интерфейс взаимодействия с плагинами (уже вторую неделю изучаю свою проблему).
И якопаю в сторону что должна быть определенная (в программе определнная) функция, которая читала бы данные из плагина. Я не могу точно написать словами (но короче хочу использовать def-файлы для видимости функций)


О def - это уж как удобней. А надо определиться не со списком функций, а с интерфейсом доступа к этим функциям. Тут не должно быть ничего особо сложного. Скажем, можно определить общую в плане присутствия функцию, и являющуюся по сути интерфейсом, вызывающим нужные методы, невидимые из главного модуля.

391
19 апреля 2006 года
Archie
562 / / 03.02.2005
Что может быть проще - посмотреть, как реализуются плагины у того же фотошопа или винампа. Кстати, коренным образон переделать логику программы заменой плагина не удастся, т.к. плагин этот должен иметь строго определенный протокол взаимодействия с основным приложением. Отступ от этого протокола - смена и приложения и плагинов.

Катати, в этом смысле хорошо писать на Java - заменил пару класс-файлов в уже готовом приложении и все. А можно их вообще из сети подгружать и немедленно внедрять в работающий код, замещая старые загруженные вируальной машиной классы, не останавливая при этом всего приложения.

Это я к тому, что самый универсальное приложение с плагинами - это интерпретатор :D
443
19 апреля 2006 года
REmindER
292 / / 23.03.2003
Цитата:
Originally posted by Archie
Что может быть проще - посмотреть, как реализуются плагины у того же фотошопа или винампа. Кстати, коренным образон переделать логику программы заменой плагина не удастся, т.к. плагин этот должен иметь строго определенный протокол взаимодействия с основным приложением. Отступ от этого протокола - смена и приложения и плагинов.

Катати, в этом смысле хорошо писать на Java - заменил пару класс-файлов в уже готовом приложении и все. А можно их вообще из сети подгружать и немедленно внедрять в работающий код, замещая старые загруженные вируальной машиной классы, не останавливая при этом всего приложения.

Это я к тому, что самый универсальное приложение с плагинами - это интерпретатор :D


Вообще-то не так уж все это и определенно. А если этот протокол и будет одним из модулей? Или программа сама вся будет составлена из модулей? Строго определено что-то может быть между двумя непосредственно связанными по логике работы уровнями, а то, что идет через них, может вообще иметь другие принципы взаимодействия, если уж об этом говорить. Хотя это к делу отношения прямого не имеет, DissDoc, прошу прощения.

249
19 апреля 2006 года
DissDoc
639 / / 01.10.2004
ArchieC интерпретатором я задумался )) Но боюсь в дебри уйти.. от сути боюсь уйти далеко
284
06 июля 2006 года
michael_is_98
587 / / 25.02.2005
[QUOTE=DissDoc]ArchieC интерпретатором я задумался )) Но боюсь в дебри уйти.. от сути боюсь уйти далеко[/QUOTE]
Интерпретор - вещь, которая сама по себе стоит кандидатской диссертации, если ею плотно заниматься.
вычисление выражений, заданных в виде строки - вполне реальная задача.
А насчет плуг-инов - зачем они нужны? Ведь если в программу поместить то, что нужно пользователю и менять (дописывать) код, который есть - этого уже достаточно. Используй интерпретатор языка, на котором пишешь.
11K
06 июля 2006 года
Ireul
90 / / 15.06.2006
Кошмар - то что вы тут про модули нагородили.

COM - не настолько эффективная модель чтобы использовать её для внутреннего взаимодействия.

Тебе подойдёт модель ядро<->модули. Реализуется это так:

Задаётся ядро, которое определяет:
Типы данных.
Способы обмена данными.
Способы обработки(фильтрации) данных.
Интерфесное взаимодействие(способы создания дочерних окон в фрейме, тулбаров, добавления/удаления пунктов меню, передача реакций на команды пользователя в модули)
Каскадное взаимодействие(совместная обработка модулями событий ядра, например drag&drop'а от одного модуля к другому).

Если эта инфраструктура у тебя есть - ты напишешь модули без особых проблем. Именно так реализован и фотошоп и винамп и много кто ещё...
350
15 июля 2006 года
cheburator
589 / / 01.06.2006
В общем, Ireul прав - во-первых, ком не такая быстрая штука (особенно если ком-сервер работает в отдельном процессе, тратится уйма времени на межпроцессные вызовы и в работу включаются всякие там службы удаленного вызова процедур... жуть...), во-вторых, зачем усложнять задачу и чем вам не нравится DLL? Нужно только с самого начала продумать интерфейс основного модуля с плагинами. Как у Микрософта есть(была) привычка при создании WinAPI в его функциях предусматривать "на всякий случай" (т. е. для использования в дальнейших версиях) дополнительные аргументы, а в хелпе писать, что этот параметр "зарезервирован и должен быть NULL" - в принципе можно поступить и так... Хотя это не очень красиво выглядит...
10
15 июля 2006 года
Freeman
3.2K / / 06.03.2004
Можно еще посмотреть, как сделано в Миранде. Достаточно забавно - они чем-то виндовую службу сообщений сымитировали.

Еще можно взглянуть в соседнюю ветку, где говорится про решения от Borland. Правда, хер его знает, как это в Си-синтаксисе пишется. Но доступ к ним точно есть - Дельфи и Билдер - близнецы-братья.
14K
16 июля 2006 года
warchangel
39 / / 17.06.2006
[QUOTE=Ireul]
COM - не настолько эффективная модель чтобы использовать её для внутреннего взаимодействия.
[/QUOTE]
глупость. COM наверно самая быстрая из компонентных технологий. на ней построена такая вещь как Direct3d - где произодительность чуть ли не вопрос жизни и смерти. и все быстро работает.
14K
16 июля 2006 года
warchangel
39 / / 17.06.2006
и вообще столько бестолковых советов на такой простой вопрос, ответ на который вообщем то содержится в первом посте. DLL - это и есть динамически подключаемые модули. A = A. вещь равняется самой себе ( как сказал кто то из философов-объективистов ). твоя задача определить общий набор функций который будет реализить каждая конкретная DLL. Другой вариант - выделить этот набор функций в абстракатный класс. и реализить его в производных классах. таким образом когда юзер командует выбрать тот или иной плагин мы создаем соответсвующий производный класс и задаем его ( например в качестве текущего ). в конструкторе мы можем реализить загрузку соответсвующей DLL например. вообщем почитай про паттерны, в частности AbstractFactory.
3
17 июля 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=warchangel]глупость. COM наверно самая быстрая из компонентных технологий. на ней построена такая вещь как Direct3d - где произодительность чуть ли не вопрос жизни и смерти. и все быстро работает.[/QUOTE]
Это всего лишь компромис.
14K
20 июля 2006 года
warchangel
39 / / 17.06.2006
[QUOTE=Green]Это всего лишь компромис.[/QUOTE]
компромисс чего с чем ? я когда то помнил но забыл :) . как миниум это еще и результат желания MS иметь собственную библиотеку для работы с 3d, оснонованную не на OpenGL, а то сча умников всяких много возьмут да и запретят использование OpenGL в коммерческих ОС.
3
20 июля 2006 года
Green
4.8K / / 20.01.2000
Компромис между быстродействием и универсальностью.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог