Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Плагины ( & формы в DLL ) теория   Найти похожие ветки 

 
GanibalLector ©   (2006-06-07 00:25) [0]

Вот все кричат, что формы в DLL это плохо...а между прочим,плагины к TotalCommander тоже содержат формы ;) А ведь популярная программа.

Посему вопрос : каким образом ГРАМОТНО разрешить проблему использования плагинов. Т.е. есть приложение, которое работает с различными девайсами. Цель : написать так, что бы через год, после выпуска нового девайса не переписывать весь проект в целом, а только дать ему новый плагин. Какие пути решений??? Может книги какие есть(по созданию крупных программных продуктов с использованием сабжа)???

В данный момент, решаю проблему именно формами в библиотеках. Подтверждаю, что есть неприятные моменты, поэтому и спрашиваю :(

Спасибо!

З.Ы. BPL не предлагать!


 
DrPass ©   (2006-06-07 00:31) [1]

Подозреваю, что плагины к TotalCommander не содержат ни одной формы, а только обычные окна. Это можно. CreateWindow[Ex] в руки - и вперед.


 
GanibalLector ©   (2006-06-07 00:41) [2]

2 DrPass ©   (07.06.06 00:31) [1]
Ссылка http://wincmd.ru/article/ListSimple.html говорит обратное. Я правда не знаю, это личное творчество некого Е. Савича или "стандарт".


 
Petr V. Abramov ©   (2006-06-07 00:49) [3]

> GanibalLector ©   (07.06.06 00:25)  
> З.Ы. BPL не предлагать!
либо исполовать стандартные BPL, либо, используя исхлдники, скомпилить свой RTL (не просто), kбо ... апстену (предыдущий вариант проще :)
ну или смириться с трындежом юзеров насчет неадекватного размера плагинов  (предыдущий вариант проще :)


 
jack128 ©   (2006-06-07 00:52) [4]

GanibalLector ©   (07.06.06 0:25)
а между прочим,плагины к TotalCommander тоже содержат формы

ты уверен?  ТО есть я на VC++ не смогу написать плагин к TC ???


 
Petr V. Abramov ©   (2006-06-07 00:55) [5]

> GanibalLector ©   (07.06.06 00:25)  
Вы контекст задачи обрисуйте, как ни пошло сие звучит


 
Юрий Зотов ©   (2006-06-07 00:57) [6]

> каким образом ГРАМОТНО разрешить проблему использования плагинов.

COM


 
DrPass ©   (2006-06-07 00:57) [7]


>  правда не знаю, это личное творчество некого Е. Савича

Это личное творчество некого Савича


 
GanibalLector ©   (2006-06-07 01:22) [8]

2 Petr V. Abramov ©   (07.06.06 00:55) [5]
>Вы контекст задачи обрисуйте, как ни пошло сие звучит
Хорошо.
Значит...есть главное приложение, его задачи : выбор плагина, читать\писать\очистить\настроить устройство, Copy\Cut\Paste некоторого блока данных. Реализовано все на интерфейсах...т.е. никакого кода по сути нет.Есть вызов методов интерфейса  из библиотеки :

if Assigned(FInterface) then
   begin
     I := FInterface.GetFrameInterface(N.Data);
     if Assigned(I) then
      I.Execute(Mode);
   end;


Плагин : в зависимости от выбора таблицы показать форму, реализация чтения\записи ..., реализация Copy\Cut\Paste .

P/S Чуть позже покажу экранные формы,надеюсь станет более понятно.


 
GanibalLector ©   (2006-06-07 01:24) [9]

2 Юрий Зотов ©   (07.06.06 00:57) [6]
> COM
Подробнее можно. Примерчик или статья...ну или пару слов в каком направлении искать.


 
tesseract ©   (2006-06-07 09:13) [10]


>  Цель : написать так, что бы через год, после выпуска нового
> девайса не переписывать весь проект в целом, а только дать
> ему новый плагин.


А зечем ему формы. Я кстати  проще сделал, написал прогу, которая протокол работы в текстовом виде вопринимает.

Описал протокол и всё:-)


 
evvcom ©   (2006-06-07 09:18) [11]


> > COM
> Подробнее можно.

и

> Реализовано все на интерфейсах...

т.е. ты знаешь, что такое интерфейсы и не знаешь, что такое COM? Это что? Орех?


 
tesseract ©   (2006-06-07 10:11) [12]

Gannibal: из статьи

Замечание: ПЛАГИН НЕ ДОЛЖЕН ИСПОЛЬЗОВАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ!


те там формы создаються и разрушаються в пределаходной функции А с этим проблем не будет. Пока функция не вернулась изголяйтесь пожалуйста :-)


 
isasa ©   (2006-06-07 10:31) [13]

evvcom ©   (07.06.06 09:18) [11]
Там (в COM), в общем-то, проблем нет, пока форма - отдельно стоящий страус. А как только начинаешь встраивать куда-нибудь(например во фрейм) - вот тут есть над чем подумать...


 
evvcom ©   (2006-06-07 10:42) [14]


> isasa ©   (07.06.06 10:31) [13]

Ну может я тогда не понял смысла вопроса, т.е. не "не знаешь, что такое COM", а "не знаешь, как обойти какие-то проблемы"? А вообще автор так ничего толком о проблеме и не сказал.
"Так как тебя понять, если ты не говоришь ничего?" (с) Иван Васильевич


 
GanibalLector ©   (2006-06-07 18:51) [15]

2 evvcom ©   (07.06.06 09:18) [11]
>т.е. ты знаешь, что такое интерфейсы и не знаешь, что такое COM? Это что? Орех?

СОМ- это технология. И под это определение попадают многие вещи,в том числе и ActiveX и OLE Autonation... т.к. эти технологии тоже базируются на СОМ. И что имел ввиду Юрий Зотов непонятно.

2 tesseract ©  
> Я кстати  проще сделал, написал прогу, которая протокол работы в текстовом виде вопринимает.
Идея хороша,ну думая,что вряди подойдет...т.к. протоколы КООРДИНАЛЬНО ОТЛИЧНЫ друг от друга. Кстати, хотелось бы посмотреть... Это возможно???


 
Юрий Зотов ©   (2006-06-07 19:19) [16]

> GanibalLector ©   (07.06.06 00:25)  

Почему непонятно? Понятно. Вы же сами хотели "написать так, что бы через год, после выпуска нового девайса не переписывать весь проект в целом, а только дать ему новый плагин".

Есть интерфейс (или набор интерфейсов) взаимодействия Exe с плагином. Плагин сидит в DLL и является сервером. Exe сидит в Exe и является клиентом. Клиент работает с сервером, используя интерфейс(ы). Сервер работает с девайсом, используя все, что угодно - клиенту это до фонаря. Сколько девайсов - столько плагинов. Появился новый девайс - написали новый плагин, НЕ МЕНЯЯ НИЧЕГО ВООБЩЕ.

В итоге получаем, что Exe може т работать с любым количеством любых девайсов не только без полного переписывания, а даже и вообще без перекомпиляции. Переписывать плагины тоже не требуется, требуется лишь писать новые. Причем, на любом языке, поддерживающем COM.


 
GanibalLector ©   (2006-06-07 19:45) [17]

2 Юрий Зотов ©   (07.06.06 19:19) [16]
Эх...примерчик бы ;)


 
tesseract ©   (2006-06-07 21:05) [18]


> Идея хороша,ну думая,что вряди подойдет...т.к. протоколы
> КООРДИНАЛЬНО ОТЛИЧНЫ друг от друга. Кстати, хотелось бы
> посмотреть... Это возможно???


Ну в общем в асю :-)  Там такой алгоритм забора параметров из ини :-)


 
isasa ©   (2006-06-07 21:59) [19]

GanibalLector ©   (07.06.06 19:45) [17]
Попробуй.
Создаем форму
File -> New -> Other -> ActiveX -> ActiveX Form.
Ваяем ...
Регистрируем
Run -> Register AxtiveX Server
Кладем в палитру
Component -> Import ActiveX Control
Ну а затем из палитры кладем на форму проекта ....


 
isasa ©   (2006-06-07 22:05) [20]

Да, забыл.
Перечень типов допустимых параметров, естественно - стандартный. Для своих - надо писать свой proxy/stub.


 
tesseract ©   (2006-06-07 22:05) [21]


> isasa ©   (07.06.06 21:59) [19]


Угу , только я думаю для динамичного проекта лучше iSpecifyPropertyPage.


 
isasa ©   (2006-06-07 22:12) [22]

tesseract ©   (07.06.06 22:05) [21]
Возможно. :)
Но там нет авто + Event, а для меня, например, создание сего ручками, как красная тряпка для быка ....


 
tesseract ©   (2006-06-07 22:15) [23]

Event там есть целых два - открытие и закрытие. По мне достаточно :-)


 
isasa ©   (2006-06-07 22:24) [24]

Да, еще забыл! :)

Потоковую модель рекомендую не кидать на самотек, чтобы получить при инициализации OLE Error ...
А выставить явно в основном прилежении CoInitializeEx(...) -ом. И синхронизировать с моделью ActiveX.

В ActiveX
TThreadingModel = (tmSingle, tmApartment, tmFree, tmBoth, tmNeutral);

В основном...
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);  <-> (В ActiveX) tmApartment
или
CoInitializeEx(nil, COINIT_MULTITHREADED); <-> (В ActiveX) tmFree или tmBoth



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

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.051 c
15-1149483514
Ega23
2006-06-05 08:58
2006.07.02
С Днём рождения! 4 июня


6-1140519916
Nachinaushiy
2006-02-21 14:05
2006.07.02
Место на диске у конечного хоста при передачи данных


1-1148213533
Windows
2006-05-21 16:12
2006.07.02
Работа с CD-RW


15-1149483657
Ega23
2006-06-05 09:00
2006.07.02
С Днём рождения! 5 июня


15-1149483452
Ega23
2006-06-05 08:57
2006.07.02
С Днём рождения! 3 июня