![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проектирование взаимодействия плагина с программой [D7, WinXP]
Kolan © (2006-03-29 21:24:00)Здравствуйте,
Есть готовая работающая программа, написаная мной. Она проводит измерение и складывает результаты в запись. Запись здаровая с дин массивами, строками итд...
Появилась задача обработать эти данные иным способом. Для этого хочу использовать плагин на основе bpl. Причин этого несколько...
Вопрос в том как организовать связь плагина с программой.
Вижу несколько вариантов:
1. Сделать в плагине процедуру типа:
procedure GiveRec(R: TRec);
И при получении результатов измерения вызывать её...
Минус в том, что придется все таки вносить в гл. программу изменения. И к томуже вдруг плагин захочет что-то еще кроме этой записи.
2. Сделать так, чтобы плагин сам брал что хотел из программы. Те нужна ему запись - взял скопировал....
Как это реализовать? Подойдет ли система bpl, или придется ковырять COM, который я вообще не знаю?
Может есть и другие способы решить проблему?
tesseract (2006-03-31 18:20:00) [1]
> Как правило, когда делаешь все на основе СОМ, сам черт не
> поймет, где сервер а где клиент :))) Получаются интерфейсы,
> обменивающиеся данными в виде интерфейсов...
Угу и главное в какой области памяти находится переменная.
Kolan (2006-03-31 17:10:00) [2]Спроетировал :)... Плагином и не пахнет правда....
Имеется программа - COM сервер(COM Объект).
И клиент.
Управлять сервером понятно как. Как получить простой тип данных вроде числа или строки тоже понятно.
А как передать клиенту запись?
Kolan (2006-03-30 14:27:00) [3]tesseract © (30.03.06 14:15) [6]
Как так? Вот есть моя программа. Внешняя посылает ей запрос типа: "Да что нибудь". Она отдает... Или нетак? Ладно пойду ка я читать, а то шас бреда понапишу тут :)
Romkin (2006-03-30 14:20:00) [4]tesseract © (30.03.06 14:15) [6] Как правило, когда делаешь все на основе СОМ, сам черт не поймет, где сервер а где клиент :))) Получаются интерфейсы, обменивающиеся данными в виде интерфейсов...
tesseract (2006-03-30 14:15:00) [5]
> осн. программу преврашаю в сервер.
Не в сервер, а в клиента :-).
Kolan (2006-03-30 14:15:00) [6]Не ну это понятно... Просто с сервером я не навязываю, те не заставляю получить данные.
А если сделать так:
Германн © (30.03.06 01:38) [2]
Затем в ней вызывается функция из плагина, которая обрабатывает эти результаты по некоему алгоритму.
То тут стороння програма будет получать данные всегда, даже если они ей не нужны сейчас..
Romkin (2006-03-30 14:12:00) [7]Kolan © (30.03.06 13:19) [4] Брать можно будет то, что ты явно указал в интерфейсах. Поэтому то, что ты будешь передавать и получать и как нужно продумать заранее.
Kolan (2006-03-30 13:19:00) [8]Правильно ли я понял, что для решения этой задачи подойдет Сервер автоматизации... Тогда вообще плагин не нужен. Просто осн. программу преврашаю в сервер. А там берите что хотите...
Kolan (2006-03-30 11:43:00) [9]Германн © (30.03.06 01:38) [2]
Ну я так и хотел. Единственно еотображать результаты должен сам плагин...
Но мне кажется нужно сделать систему типа - "Бери что хчешь и делай с ним что тебе надо...".
Reindeer Moss Eater © (29.03.06 22:50) [1]
Где можно взять принцип..?
Германн (2006-03-30 01:38:00) [10]
> Минус в том, что придется все таки вносить в гл. программу
> изменения. И к томуже вдруг плагин захочет что-то еще кроме
> этой записи.
Если один из двух взаимодействующих модулей (программ) не умеет чего-то делать, то никакой плагин не сможет его (её) научить этому. Имхо.
Упрости задачу. Ну например, в главной программе создаётся запись, содержащая результаты измерений. Затем в ней вызывается функция из плагина, которая обрабатывает эти результаты по некоему алгоритму. И обработанные результаты возвращает в основную программу в приемлемом виде (таблица, график и т.п.).
Reindeer Moss Eater (2006-03-29 22:50:00) [11]Возьми программу с поддержкой плугинов и изучи вопрос взаимодействия.
Не исходники программы и плугина, а принцип.