Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Kolan ©   (2007-01-28 15:16) [0]

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

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

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

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

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

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


 
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]

&laquo;[2] Olivetti   (28.01.07 17:37)&raquo;


&laquo;MetalFan © &raquo;

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


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

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


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

moze&#353; sdelatj chers Mail sloty, ili RPC togda tebe bebado vse delatj cerez boblioteki, programma B mozet rabotatj kak rogramma (i, naprimer, otobra&#382;at tu ze temperaturu), programm&#245; mogut nahoditsja na razn&#245;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]

&laquo;Я уже копал.&raquo;

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


 
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]

&laquo;Проблема в чём?&raquo;

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

А может с пакетами сделать? Пробовал сегодня неполучилось нихрена :(
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
3-1167191836
Kvinta
2006-12-27 06:57
2007.03.25
CAST в Microsoft.Jet.OLEDB.4.0


4-1162592489
ph0sgen
2006-11-04 01:21
2007.03.25
вопрос по BASM


2-1172994806
FIL-23
2007-03-04 10:53
2007.03.25
Изменение ключа в таблице


3-1168009417
16alex
2007-01-05 18:03
2007.03.25
как из delphi при помощи dbexpress создавать временные таблицы


2-1172693006
Lonix
2007-02-28 23:03
2007.03.25
Вопрос с отправкой мыла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский