Форум: "Основная";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
ВнизВзаимодействие программы и плагина. Найти похожие ветки
← →
Kolan © (2007-01-28 15:16) [0]Задравствуйте,
ИМХО задача непростая. Вот суть:
1. Есть программа, которая работает с устройством. Назавем её программа «А».
По команде пользователя она получает данные из устройства и создает сложный объект «измерение».
Кроме всего прочего в «измерении» есть «список параметров».
По данным из устройства программа «А» заполняет этот «список параметров».
2. Есть программа «Б». Она тоже по команде пользователя получает из совершенно другого устройства значение температуры.
3. Мне нужно сделать программу «Б» как-бы плагином для «А».
Работать все должно примерно так:
Получив данные и создав «измерение» программа «А» создает событие «проведено измерение».
Если плагин-программа «Б» подключен, то он по событию «проведено измерение» запрашивает своё устройство, получает температуру,
и добавляет её(температуру) в «список параметров» «измерения»(напомню измерение создается в программе «А»).
А если плагина нет, то ничего не происходит. программа «А» работает как обычно.
Желательно программу «А» модифицировать поминимуму, только ввесли поддержку плагинов(дюбых).
Вопрос: Как это сделать? Какие технологии использовать?
Желательно получить небольшую инструкцию, типа делаай то, потом вот это итд…
:)
← →
MetalFan © (2007-01-28 17:25) [1]выдели код, выполняющий задачу "Б" в длл. а в программе проверяй ее наличи, если есть, загружаешь, работаешь,дополняешь данные, выгружаешь.
← →
Olivetti (2007-01-28 17:37) [2]Как-то так:
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;
← →
Kolan © (2007-01-28 18:17) [3]«[2] Olivetti (28.01.07 17:37)»
«MetalFan © »
Идея ясна, благодарю.
Но так как вы описали программа «А» будет знать о существонвании программы «Б».
И будет знать что программа «Б» именно температуру измеряет.
А я хочу чтобы «А» давалыбы лишь возможность добавлять параметры(нпример температуру).
А плагины делали бы все что им нужно. Те «А» ничего не знает о «Б»(только то что его надо загрузить).
← →
Olivetti (2007-01-28 18:34) [4]Сделай в библиотеке универсальную функцию, типа Calculate() с параметрами, подходящими для всех случаев - что туда передать, и что оттуда забрать. Что и как она будет калькулировать - будет зависеть от конкретной реализации в конкретной библиотеке. В "А" сканируй папку с библиотеками, грузи найденные в "А", бери в каждой библиотеке адрес функции "Calculate", вызывай ее с параметрами и получай результат.
← →
_SuN_ (2007-01-28 21:36) [5]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
← →
tesseract © (2007-01-28 21:51) [6]Я бы начал копать в сторону COM. Они намного гибче и функциональнее.
← →
Германн © (2007-01-29 00:52) [7]
> tesseract © (28.01.07 21:51) [6]
>
> Я бы начал копать в сторону COM. Они намного гибче и функциональнее.
>
>
И не отступал бы от такого пути. Имхо, самое оно. Но тут ещё много предстоит сделать, чтобы реально заработало.
← →
Kolan © (2007-01-29 20:01) [8]
> Я бы начал копать в сторону COM. Они намного гибче и функциональнее.
Я уже копал. Конкретно что предлогаете?
← →
Kolan © (2007-01-29 21:04) [9]«Я уже копал.»
Имел ввиду что знаю что такое COM, Интерфейс, Type Libruary. Делал программу которая была ком сервером, а другая её управляла.
Вопрос как это применить? Те нужа архитектура примерная…
← →
tesseract © (2007-01-29 21:37) [10]
> Вопрос как это применить? Те нужа архитектура примерная…
Type library она в ole. Com - наследник интерфейса Inknown. Например можно реализовать вызов неизвестынх на момент создания проги функций и тд.
Примеры Com-плагинов - MS-office add-ins, 1с внешние компоненты и тд. Проблема в чём? вызываем плаин с известным нам (мы ж сами для него интерфейс накатали) функциями, и делаем что-хотим.
← →
Kolan © (2007-01-29 21:43) [11]«Проблема в чём?»
А где можно пример разработки программы с поддержкой плагинов посмотреть? Для тупых :)
Незнаю как начать :(
А может с пакетами сделать? Пробовал сегодня неполучилось нихрена :(
http://delphimaster.net/view/1-1170090990/
← →
tesseract © (2007-01-29 22:55) [12]
> А где можно пример разработки программы с поддержкой плагинов
> посмотреть? Для тупых :)
Если знаешь, как работает COM - то и примеров искать не надо. Задача в [0]
полностью решается COM, ибо для того COM и был создан.
← →
Германн © (2007-01-30 01:39) [13]
> Kolan © (29.01.07 21:04) [9]
>
> «Я уже копал.»
>
> Имел ввиду что знаю что такое COM, Интерфейс, Type Libruary.
> Делал программу которая была ком сервером, а другая её
> управляла.
> Вопрос как это применить? Те нужа архитектура примерная…
Видал на рынке CD посвящённые работе именно с COM. И с примерами.
Ищи, да обряшещь!
← →
Германн © (2007-01-30 01:42) [14]Хотя, конечно лучше "вникнуть в суть" :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 4.051 c