Pogawędki po swojemu

Tlen.pl jest jednym z najbardziej popularnych w naszym kraju komunikatorów internetowych. Popularność ta jest zasłużona, bo program jest wygodny w obsłudze, korzysta z protokołu opartego na sprawdzonym Jabberze (szkoda, że nie używa go bezpośrednio – Jabber jest otwartym standardem) i jest po prostu ładny. Ponadto Tlen.pl cechuje się stosunkowo dobrze przemyślaną konstrukcją, co objawia się m.in. możliwością tworzenia wtyczek (plug-inów) do tego programu.

Jako że w chwili, gdy ten numer CHIP-a pojawi się w kioskach, powinien już trwać konkurs na wtyczkę do opisywanego komunikatora, zorganizowany wspólnie przez CHIP-a i portal Tlen.pl, postanowiliśmy przyjrzeć się bliżej wspomnianym plug-inom. Może któryś z naszych Czytelników, zainspirowany lekturą tego artykułu, stanie w konkursowe szranki? Jeśli nie, i tak warto zaznajomić się z mechanizmami tworzenia wtyczek i zasadami działania bibliotek DLL – bo z takiej właśnie techniki skorzystamy.

Do napisania przykładowej wtyczki wykorzystamy Delphi – ze względu na jego sporą popularność. Potrzebna będzie więc podstawowa znajomość tego języka programowania (na poziomie tworzenia obiektów, używania wskaźników itp. – resztę wyjaśnimy w treści artykułu). Załączony na CD instalator Tlena zawiera też biblioteki API Tlena stworzone dla języków C++ (w którym powstał Tlen.pl) i VisualBasic.

Trochę techniki – czyli wtyczki w Tlenie

Do zalet modułowej budowy programów, której elementem mogą być właśnie wtyczki, nie trzeba chyba nikogo przekonywać. Wystarczy wspomnieć, że dobrze przemyślany interfejs plug-inów (o nim za chwilę) pozwala na bardzo elastyczne rozszerzanie zestawu funkcji danej aplikacji, i to bez znajomości dokładnej struktury programu. Zyski są oczywiście obopólne – użytkownicy otrzymują nowe opcje aplikacji, autor/producent cieszy się z rosnącego grona zadowolonych użytkowników, którzy (mówiąc wprost) wykonują za niego część wartościowej pracy.

Można sobie wyobrazić co najmniej kilka sposobów implementacji mechanizmu wtyczek. W środowisku Windows samo się jednak narzuca skorzystanie z bibliotek dołączanych dynamicznie (DLL – Dynamic Linked Libraries). Nadają się one do tego celu idealnie, gdyż aplikacja może załadować taką bibliotekę w dowolnym momencie swojego działania.

Programista tworzący plug-in musi znać tzw. API (Application Programming Inter-face), czyli interfejs programistyczny danej aplikacji. Mówiąc jaśniej, musimy po prostu wiedzieć, jaki zestaw funkcji udostępnia nam twórca programu. Nieco więcej szczegółów na temat API wtyczek i samych plug-inów Tlena można znaleźć w ramce na sąsiedniej stronie.

System wtyczek komunikatora Tlen.pl oparty jest na zestawie jedenastu bibliotek, których pliki nagłówkowe umieszczono w podfolderze \sdk\TlenSources\plugin katalogu Tlena (potrzebny jest instalator umieszczony m.in. na krążku CD/DVD dołączonym do tego numeru). Zastosowanie niektórych bibliotek omówimy w trakcie pisania przykładowej wtyczki, dokumentację pozostałych można znaleźć w pliku Pomocy, który zamieszczono na stronie Tlena (patrz: ramka na końcu tekstu).

Na początek – przykładowy plug-in

Najłatwiejszą metodą rozpoczęcia pracy nad pisaniem własnej wtyczki jest skorzystanie z gotowych przykładów. Wtyczki w C++ są dostarczane wraz ze wspomnianą wersją komunikatora, w Delphi – w dodatkowym pliku (patrz: CHIP-CD). Po zainstalowaniu programu rozpakowujemy plik ZIP zawierający SDK (Software Development Kit) dla Delphi. Znajdziemy w nim katalogi Plugin_src i TlenSources. Pierwszy z nich zawiera przykładowe wtyczki, drugi – biblioteki z definicjami funkcji API, które będą potrzebne do skompilowania wtyczki.

Wchodzimy do folderu Plugin_src\basic-delphi i otwieramy plik z definicją projektu (

basic.bpr

). Jak łatwo zauważyć, plik ma bardzo skromną zawartość. Umieszczono w nim jedynie klausulę uses, deklarację rekordu typu TLENPLUGININFO, definicje trzech prostych funkcji oraz polecenia eksportu ich nagłówków. Zawartość projektu jest jednak zgodna z przeznaczeniem tej wtyczki – możemy na jej podstawie poznać główne elementy każdego plug-inu komunikatora Tlen.pl.

Wyjaśnijmy pokrótce znaczenie poszczególnych elementów kodu. Rekord pluginInfo zawiera informacje o wtyczce, wyświetlane w oknie zarządzania plug-inami Tlena (o którym powiemy nieco później). Funkcja GetPluginInfo dostarcza komunikatorowi informacji o naszej wtyczce, umieszczonych w rekordzie

pluginInfo

(funkcja powinna zwracać referencję do rekordu typu TLENPLUGININFO).

LoadPlugin

to funkcja wykonywana w trakcie ładowania wtyczki przez komunikator (możemy tu umieścić odwołania do naszych procedur inicjujących plug-in), a

UnloadPlugin

– w trakcie jej odłączania. Deklaracja exports jest charakterystyczna dla bibliotek DLL – dzięki niej nagłówki wskazanych funkcji są dostępne dla programu używającego biblioteki (czyli Tlena).

Po kompilacji modułu ([Ctrl]+[F9]) uzyskamy plik wynikowy

basic.tpl

(rozszerzenie zbioru zostanie nadane zgodnie z dyrektywą {$E tpl}). Kopiujemy go do podkatalogu \plugins folderu Tlena. Aby zarejestrować wtyczkę w komunikatorze, używamy polecenia Ustawienia programu z jego głównego menu. Na karcie Pluginy zaznaczamy pozycję basic.tpl. Po potwierdzeniu decyzji (program upewni się, że chcemy zarejestrować wtyczkę, która nie ma autoryzacji producenta) ujrzymy wywoływane w funkcji Load-Plugin okienko komunikatu, potwierdzające uruchomienie plug-inu. Podobny efekt da wyłączenie wtyczki w Tlenie.

Więcej:bezcatnews