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

Вниз

Плагин и СОМ в одном флаконе   Найти похожие ветки 

 
GanibalLector ©   (2005-02-06 23:38) [0]

Ситуация следующая.Имеется приложение для работы с некоторыми устройствами.Так как,эти устройства постоянно меняются\обновляются и т.д.
было принято решение о использовании плагинов.В данный момент правила общения с плагином строго оговоренны.(т.е. главное приложение знает о
существовании 50 ф-ций,знает их имена и по мере надобности их вызывает).

Предполагаю работать следующим образом:
-подключить плагин;
-получить св-ва устройсва(они в плагине прописаны);
-в зависивости от полученных св-в правильно сформировать контролы(StringGrid-ы,Edit-ы и прочее)
-ну,и работать...

Более чем уверен,что в ближайшем будующем появяться уст-ва, в которых появяться новые св-ва и события.Соответственно,моя программа уже не сможет ими
воспользоваться.Насколько я понимаю,в плагине можно  сделать ф-цию возвращаюшую список НОВЫХ св-в и событий устройства и использовать их.
Тут,как бы,все понятно,но все же,если кто видел статейку или хороший исходник подкиньте(не помешает).

Ну и напоследок,неплохо бы все это сделать СОМ-сервером.Опять таки,в данный момент я могу сделать несколько св-в и событий из тех,которые мне известны.
А что делать через год,когда я в плагине пропишу новые св-ва? Ведь их имена я узнаю только загрузив плагин и вызвав ф-цию GetNewProperty(например).
Получается,что СОМ никак не сделать :(


 
хм ©   (2005-02-06 23:42) [1]

Я бы в bpl делал и использовал RTTI.
А что мешает COM сделать непонятно


 
jack128 ©   (2005-02-06 23:52) [2]

GanibalLector ©   (06.02.05 23:38)
Получается,что СОМ никак не сделать :(

почему нельзя? Реализуй IDispatch и работай :-)

Скажи, кто то посторонний будет разрабатывать плагины
GanibalLector ©   (06.02.05 23:38)
Так как,эти устройства постоянно меняются\обновляются и т.д.
было принято решение о использовании плагинов.

ИМХО, это не достаточная причина. Дополнительно к этой, нужно еще что бы СТОРОННИЕ программисты желали писать плагины для твоей программы. Иначе ты рискушь нажить очень большой гемор не получив ничего в замен..


 
GanibalLector ©   (2005-02-06 23:56) [3]

>Скажи, кто то посторонний будет разрабатывать плагины
Это Я.

>ИМХО, это не достаточная причина.
Почему,мотивируй! Представь ситуацию:50 устройств для каждого свое ПО(причем иногда очень левое(такое ощущение,что школьники писали)).На работе муторно отслеживать выход новых версий,да и муторно держать 50 программ.Причем у всех свой интерфейс.


 
GanibalLector ©   (2005-02-07 00:02) [4]

>почему нельзя? Реализуй IDispatch и работай
К сожалению я пока с сабжем не знаком...но я исправлюсь ;)

Хотел уточнить.
В моем СОМ-приложении в данный момент 50 методов.Я могу их вызывать и использовать из др.приложений.Предположим,через год мне необходимо будет прописать еще ОДНО(т.е.51).Причем его название сидит в плугине и параметры указаны в плугине. Ты уверен,что я смогу это сделать без рефакторинга???


 
jack128 ©   (2005-02-07 00:21) [5]

GanibalLector ©   (06.02.05 23:56) [3]
муторно держать 50 программ.

зачем 50 программ??? Одна программа + 50 define"ов(по define"у на каждое устройство).

Еще раз. Использование плагинов предпологает использование единого ИНТЕРФЕЙСА для каждого устройства. Но тот же самый интерфейс ты можешь реализовать внутри своей программы. Условно говоря сделать базовый класс
type
 TDevice = class
 public
   function GetPropCount: Integer; virtual; abstract;
   function GetPropName(index: Integer); virtual; abstract;
   function GetPropValue(index: Integer): Variant; virtual; abstract;
 end;

и в наследниках перекрывать эти методы:

{$ifdef Device1_Supported}
 TDevice1 = class(TDevice)
 public
   function GetPropCount: Integer; override;
   function GetPropName(index: Integer); override;
   function GetPropValue(index: Integer): Variant; override;
 end;
{$endif}

В чем приемущество? В том, что если вдруг при разработке очередного устройства ты вдруг поймешь, что базовый интерфейс тебя сковывает в чем то, что его нужно расширить или вообще переделать нафиг, ты с легкостью это это сделаешь. Передалать одну одну программу гораздо легче, чем переделать одну программу + 50 плагинов. С другой чтороны, когда ты поймешь: да, базовый интерфейс идеален, то ты с легкостью сможешь ввести в приложение поддержку плагинов.
GanibalLector ©   (07.02.05 0:02) [4]
Причем его название сидит в плугине и параметры указаны в плугине

парамеры чего? Свойства?? В смысле индексаторы свойств-массивов или что имеется в виду?? Вообще, давай я те замечательную статью Тенцера про реализацию IDispatch в компонентах замылю. Получишь представление и об RTTI и об IDispatch


 
default ©   (2005-02-07 00:24) [6]

jack128 ©   (07.02.05 00:21) [5]
лучше ссылку скинь в инете на эту статью тут


 
jack128 ©   (2005-02-07 00:58) [7]

Я точную ссылку не помню. У app на сайте есть полное собрание статей этого автора, посмотри там. статья про ScriptControl. Очень любопытная вещь..


 
GanibalLector ©   (2005-02-07 01:58) [8]

2 jack128
М-да...занятная статейка.Однако,это не в мой огород.


 
jack128 ©   (2005-02-07 02:13) [9]

Я ж её кинул не в качестве примера плагина, а как пример реализации IDispatch

Кстати, а почему не в твой огород, вот будешь реализывать свои плагины на VB скриптах, будет супер :-)))


 
GanibalLector ©   (2005-02-07 02:20) [10]

>стати, а почему не в твой огород, вот будешь реализывать свои плагины на VB скриптах, будет супер

Чур тебя ;)
Там работа с портом(причем не хилая).УжасЪ.А если еще на васике,то ...(помру я)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.046 c
14-1108038266
TUser
2005-02-10 15:24
2005.02.27
Полезный эксперт


1-1108037715
VladRaven
2005-02-10 15:15
2005.02.27
Perform(WM_NEXTDLGCTL, 0, 0) = следующий а как = предыдущий.?


14-1107764243
juice
2005-02-07 11:17
2005.02.27
Обьект как данные-элемент


1-1108447358
ТехникПТО
2005-02-15 09:02
2005.02.27
Продолжите плиз...


14-1107759179
KSergey
2005-02-07 09:52
2005.02.27
Книжки по С++





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский