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