Форум: "Потрепаться";
Текущий архив: 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