Pisanie aplikacji otwartch na wtyczki

Odpowiedz Nowy wątek
2006-08-05 19:34
0

Zamierzam napisać program w Delphi, który ma mieć obługę wtyczek i pluginów. Zastanawiam się, jak to zrobić? Chcę, by użytkownik (znając jakiś język programowania) mógł napisać własną wtyczkę, robiącą to, co użytkownik sobie sam wymyśli. Jak powinna wyglądać organizacja kodu aplikacji, żeby to było możliwe? Jak powinna być napisana dokumentacja do mojej aplikacji, żeby użytkownik nie miał problemów z napisaniem takiej wtyczki? Jakie funkcje powinny być udostępnione użytkownikowi? Jak powinien wyglądać plik takiej wtyczki? Jakie rady moglibyście jeszcze dać w tej sprawie?

Pozdrawiam i dziękuję za odpowiedzi :)


Pozostało 580 znaków

2006-08-06 00:01
0

jezeli chodzi o dokumentacje etc - sa programy dajace takie mozliwosci, ja bym w nich szukal info jak dobrze to zrobic. Jezeli chodzi o organizacje kodu aplikacji - niech ktos inny Ci odpowie, na googlach tez pewnie cos znajdziesz :-D


Pozostało 580 znaków

2006-08-06 10:02
0

Immilewski - w sumie to żeś nic nie powiedział :)

Gdy swego czasu myśleliśmy (ja, Adam Pilorz, Brodny) nad systemem wtyczek do PilotMP3 2.0 (który leży w stanie nierozpoczątym) to wybraliśmy prosty sposób - użyliśmy bibliotek DLL. Ładujemy je dynamicznie, wyszukujemy tam odpowiednie funkcje i procedury, która taka wtyczka musi posiadać, przekazujemy do nich jakieś parametry (w tej chwili nie pamiętam dokładnie co) i wykonujemy.

Program o ile pamiętam ma obsługę różnych typów wtyczek, które rozpoznaje się na podstawie tego, co odpowiednia funkcja w bibliotece zwróci, same wtyczki mają też dostęp do kilku funkcji głównego programu jak np. InternalError() ;)

Jeżeli chcesz to mogę zgrać z CVS i udostępnić obecne, bardzo stare stadium PilotMp3 1.5, gdzie trochę o tych wtyczkach jest kodu ;)

Pozostało 580 znaków

2006-08-06 10:40
0
Ktos napisał(a)

[...] to wybraliśmy prosty sposób - użyliśmy bibliotek DLL

Szczerze mówiąc to nie spotkałem się z innym rozwiązaniem niż użycie DLL'i ;) Dodam jeszcze, że przy projektowaniu inteface'u plugina warto zadbać o to, żeby była możliwość napisania go (plugina) w innym języku niż ten w którym pisany był host (vide interface'y COM) - czyli żadne tam AnsiString'i std::string'i, TForm'y itd. jako parametry. Jasno określić konwencję wywołania metod/funkcji (na ogół __stdcall).

konik napisał(a)

Jak powinna być napisana dokumentacja do mojej aplikacji, żeby użytkownik nie miał problemów z napisaniem takiej wtyczki?

Nie opis aplikacji tylko opis interface'u plugina - co robi dana metoda/funkcja, kiedy jest wywoływana itd.

Pozostało 580 znaków

2006-08-06 15:54
0

A jak to wygląda w programach typu Tlen itp? Tam można zrobić praktycznie wszystko, prawie całkowicie zaingerować w kod programu, tak, że później nie można poznać, co było, a czego nie było ;). Zdaje się, że Tlen ma udostępnione coś w stylu API. Chodzi mi właśnie o napisanie takiej aplikacji. Wiem, że to trudne i dlatego szukam pomocy i rad ;)

Ktos, mógłbyś "zgrać i udostępnić" PilotaMP3? Jeśli dużo to nie zajmuje, to mógłbyś mi wysłać na e-mail? Byłbym wdzięczny ;)


Pozostało 580 znaków

2006-08-06 17:47
0
konik napisał(a)

A jak to wygląda w programach typu Tlen itp? Tam można zrobić praktycznie wszystko, prawie całkowicie zaingerować w kod programu, tak, że później nie można poznać, co było, a czego nie było ;).

Najprościej ściągnąć to API i zobaczyć ;)

Wiem, że to trudne [...]

To zależy co chcesz zrobić bo "opluginowanie" każdego elementu programu jest stratą czasu.

Pozostało 580 znaków

2006-08-06 18:40
0

Mam to API, tyle, że nie wiem, jak zrobić coś takiego w swoim programie :P


Pozostało 580 znaków

2006-08-06 19:39
0

A co to za program i co te pluginy (dokładnie) mają rozszerzać???

Pozostało 580 znaków

2006-08-06 20:07
0

Program do czyszczenia różnych folderów (np TEMP) ze zbędnej zawartości ;). Chodzi o to, że program opierłby się na wtyczkach: mam wtyczkę od czyszczenia folderu temp, drugą do cookies, inną od ostatnio otwieranych dokumentów, historii FF itp. i każdy mógłby sobie napisać własną wtyczkę, która by coś robiła, czyli coś czyściła ;). Z tym już sobie poradziłem, zrobiłem na zasadzie plików dll i jest ok.

Druga sprawa to po prostu rozszerzenie funkcjonalności. Czyli na przykład użytkownik mógłby zrobić wtyczkę, która otwiera okienko, na których są wyświetlane dane nt. dysków w komputerze i tym podobne. I z tym mam problem ;)


Pozostało 580 znaków

2006-08-06 20:58
0
konik napisał(a)

Program do czyszczenia różnych folderów (np TEMP) ze zbędnej zawartości ;). Chodzi o to, że program opierłby się na wtyczkach: mam wtyczkę od czyszczenia folderu temp, drugą do cookies, inną od ostatnio otwieranych dokumentów, historii FF itp.

A nie wydaję Ci się, że to trochę bez sensu??? Przecież prościej zrobić listę (ListView) lub drzewo (TreeView) gdzie user zaznacza które katalogi program powinien czyścić.

Druga sprawa to po prostu rozszerzenie funkcjonalności. Czyli na przykład użytkownik mógłby zrobić wtyczkę, która otwiera okienko, na których są wyświetlane dane nt. dysków w komputerze i tym podobne. I z tym mam problem ;)

Aplikacja robi listę pluginów, później z każdego plugina pobiera nazwę opcji (ISomePlugin::GetName) plus ikonę jeśli trzeba (ISomePlugin::GetMenuIcon), którą udostępnia i dodaje np. do menu - w VCL'u, w TMenuItem::Tag przypisujesz index plugina. Wszystkie dodane "itemy" w menu mają ten sam handler OnClick, w którym uruchamiasz np. metodę ISomePlugin::Execute. To który plugin został wywołany rozpoznasz po indeksie zawartym w TMenuItem::Tag. Jeżeli plugin zawiera okno to oczywiście musisz podać mu uchwyt okna-rodzica. Tyle...;)

Pozostało 580 znaków

2006-08-06 21:47
0

ad 1) To wolę zrobić po swojemu ;)

ad 2) Jednak tu nie chodzi o zamknięty wybór możliwości dla użytkownika, ale pewną dowolność - żeby mógł wrzucić na środek buttona, który wyświetli wiadomość "bla, bla, bla", żeby mógł wrzucić jakąś formatkę przu uruchamianiu programu, dodać pozycję do popupa w tray'u i menu itd. Gdybym miał oprogramować każdą możliwość, zajęłoby mi to wieki :]


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0