Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Взаимодействие программы и плагина.


Kolan ©   (2007-01-28 15:16:00) 

Задравствуйте,
 ИМХО задача непростая. Вот суть:
 
1. Есть программа, которая работает с устройством. Назавем её программа «А».
По команде пользователя она получает данные из устройства и создает сложный объект «измерение».
Кроме всего прочего в «измерении» есть «список параметров».
По данным из устройства программа «А» заполняет этот «список параметров».

2. Есть программа «Б». Она тоже по команде пользователя получает из совершенно другого устройства значение температуры.

3. Мне нужно сделать программу «Б» как-бы плагином для «А».
Работать все должно примерно так:
 Получив данные и создав «измерение» программа «А» создает событие «проведено измерение».
 Если плагин-программа «Б» подключен, то он по событию «проведено измерение» запрашивает своё устройство, получает температуру,
 и добавляет её(температуру) в «список параметров» «измерения»( напомню измерение создается в программе «А»).

 А если плагина нет, то ничего не происходит. программа «А» работает как обычно.

Желательно программу «А» модифицировать поминимуму, только ввесли поддержку плагинов(дюбых).

Вопрос:Как это сделать? Какие технологии использовать?
Желательно получить небольшую инструкцию, типа делаай то, потом вот это итд…
:)


Германн   (2007-01-30 01:42:00) [1]

Хотя, конечно лучше "вникнуть в суть" :)


Германн   (2007-01-30 01:39:00) [2]


> Kolan ©   (29.01.07 21:04) [9]
>
> «Я уже копал.»
>
> Имел ввиду что знаю что такое COM, Интерфейс, Type Libruary.
>  Делал программу которая была ком сервером, а другая её
> управляла.
> Вопрос как это применить? Те нужа архитектура примерная…

Видал на рынке CD посвящённые работе именно с COM. И с примерами.
Ищи, да обряшещь!


tesseract   (2007-01-29 22:55:00) [3]


> А где можно пример разработки программы с поддержкой плагинов
> посмотреть? Для тупых :)


Если знаешь, как работает COM - то и примеров искать не надо. Задача в  [0]
полностью решается COM, ибо для того COM и был создан.


Kolan   (2007-01-29 21:43:00) [4]

«Проблема в чём?»

А где можно пример разработки программы с поддержкой плагинов посмотреть? Для тупых :)
Незнаю как начать :(

А может с пакетами сделать? Пробовал сегодня неполучилось нихрена :(
http://www.delphimaster.ru/cgi-bin/forum.pl?n=0&id=1170090990


tesseract   (2007-01-29 21:37:00) [5]


> Вопрос как это применить? Те нужа архитектура примерная…


Type library она в ole. Com - наследник интерфейса Inknown.  Например можно реализовать вызов неизвестынх на момент создания проги функций и тд.
Примеры Com-плагинов - MS-office add-ins, 1с внешние компоненты и тд. Проблема в чём? вызываем плаин с известным нам (мы ж сами для него интерфейс накатали) функциями, и делаем что-хотим.


Kolan   (2007-01-29 21:04:00) [6]

«Я уже копал.»

Имел ввиду что знаю что такое COM, Интерфейс, Type Libruary. Делал программу которая была ком сервером, а другая её управляла.
Вопрос как это применить? Те нужа архитектура примерная…


Kolan   (2007-01-29 20:01:00) [7]


> Я бы начал копать в сторону COM. Они намного гибче и функциональнее.

Я уже копал. Конкретно что предлогаете?


Германн   (2007-01-29 00:52:00) [8]


> tesseract ©   (28.01.07 21:51) [6]
>
> Я бы начал копать в сторону COM. Они намного гибче и функциональнее.
>
>

И не отступал бы от такого пути. Имхо, самое оно. Но тут ещё много предстоит сделать, чтобы реально заработало.


tesseract   (2007-01-28 21:51:00) [9]

Я бы начал копать в сторону COM. Они намного гибче и функциональнее.


_SuN_   (2007-01-28 21:36:00) [10]

mozeš sdelatj chers Mail sloty, ili RPC togda tebe bebado vse delatj cerez boblioteki, programma B mozet rabotatj kak rogramma (i, naprimer, otobražat tu ze temperaturu), programmõ mogut nahoditsja na raznõh kompjuterah


Olivetti   (2007-01-28 18:34:00) [11]

Сделай в библиотеке универсальную функцию, типа Calculate() с параметрами, подходящими для всех случаев - что туда передать, и что оттуда забрать. Что и как она будет калькулировать - будет зависеть от конкретной реализации в конкретной библиотеке. В "А" сканируй папку с библиотеками, грузи найденные в "А", бери в каждой библиотеке адрес функции "Calculate", вызывай ее с параметрами и получай результат.


Kolan   (2007-01-28 18:17:00) [12]

«[2] Olivetti   (28.01.07 17:37)»


«MetalFan © »

Идея ясна, благодарю.
Но так как вы описали программа «А» будет знать о существонвании программы «Б».
И будет знать что программа «Б» именно температуру измеряет.
А я хочу чтобы «А» давалыбы лишь возможность добавлять параметры(нпример температуру).
А плагины делали бы все что им нужно. Те «А» ничего не знает о «Б»(только то что его надо загрузить).


Olivetti   (2007-01-28 17:37:00) [13]

Как-то так:

library Termometr;

function GetTemperature: double; stdcall;
begin
 // алгоритм определения температуры
end;

exports
 GetTemperature;

begin
end.


Использование в программе:

type
 GetTemperatureFunc = function: double; stdcall;

function GetTemperature: double;
var
 GetTemp: GetTemperatureFunc;
 Lib: THandle;

const
 LibName = 'termometr.dll';

beign
 Result := 0; // значение по умолчанию
 if FileExists(LibName) then
 begin
   Lib := LoadLibrary(PChar(LibName));
   try
     GetTemp := GetProcAddress(Lib, 'GetTemperature');
     if (GetTemp <> nil) then
       Result := GetTemp;
   finally
     FreeLibrary(Lib);
   end;
 end;
end;


MetalFan   (2007-01-28 17:25:00) [14]

выдели код, выполняющий задачу "Б" в длл. а в программе проверяй ее наличи, если есть, загружаешь, работаешь,дополняешь данные, выгружаешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо