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

Вниз

Плагины ( & формы в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.012 c
2-1149706067
Alextp
2006-06-07 22:47
2006.07.02
Определить моноширинный шрифт


3-1146131337
yaral
2006-04-27 13:48
2006.07.02
Как закрыть DataModule


2-1149571360
Алексий
2006-06-06 09:22
2006.07.02
экран + мышка


2-1149773308
Serzh
2006-06-08 17:28
2006.07.02
System Tray


2-1150262895
Марина
2006-06-14 09:28
2006.07.02
Координаты курсора над объектом?





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