Active Template Library

Ostatnio bawiłem sie z prostą aplikacją embedując kontrolkę Internet Explorera oraz silnik Gecko. Po raz pierwszy miałem nieco szerszy i dłuższy kontakt z technologią COM i XPCOM.

Nieodłączny związek z COM ma biblioteka ATL (Active Template Library), która w rzeczywistości jest zbiorem klas szablonowych języka C++ opracowanych przez Microsoft. Jak sie można domyślić z nazwy, idea podobna jak w przypadku STL. Głównym zadaniem biblioteki jest ułatwienie korzystania i tworzenia komponentów w technologii COM.

Jak to zawsze bywa, w każdej bibliotece można znaleźć ciekawe i przydatne funkcje. Podobnie ma się sprawa z ATL, gdzie prócz czysto COM-owych rzeczy znajdziemy całkiem fajne klasy i funkcje, które możemy wykorzystać w dowolnym programie. Do tego nie musimy dodatkowo nic linkować do programu.

Do wspomnianych utilsów można zaliczyć mechanizmy konwersji stringów pomiędzy różnymi formatami i kodowaniami. Oczywiście ciekawych rzeczy można znaleźć dużo więcej (obsługa plików, rejestru, inteligentne wskaźniki...).

W przypadku opisanych stringów, skorzystanie z tych mechanizmów zamiast ręcznego rzeźbienia kodu z użyciem funkcji MultiByteTo/WideCharTo... jest dużo łatwiejsze i bezpieczniejsze. Mamy kod odporny na wyjątki, a dzięki zastosowaniu idiomu RAII nie musimy martwic sie o przydział i zwalnianie pamięci, o wszystko zadbają odpowiednie mechanizmy języka i kompilator.

Sam za pierwszym razem próbowałem opakować w klasę i RAII wspomniane funkcje i stworzony kod byłem gotowy zostawić w projekcie, gdy nagle mnie olśniło, "korzystam z COM, wspieram sie ATL-em, więc na pewno coś musi być dostępne do zabaw z stringami" i znalazłem ;)

Tworzony program pisałem w czystym WinAPI, ale bez problemów można wykorzystać ATL w dowolnym innym, czy to MFC (choć sam ma swoje mechanizmy), czy WTL, czy cokolwiek innego.

ATL powstało głownie do uproszczenia zabaw z COM, więc posiada jedynie elementy do tego niezbędne. Chcąc w podobnym stylu stworzyć aplikację, warto skorzystać z biblioteki WTL (Windows Template Librar), która również jest zbiorem wzorców, tym razem implementujących obsługę okien i całej reszty niezbędnej do budowy aplikacji dla systemu Windows.

Bardzo zachęcam do poznania i korzystania, szczególnie, gdy musimy bawić sie z technologią COM. Ale nawet jeśli piszemy zwykłą aplikację pod system Windows warto skorzystać z szablonów oferowanych przez ATL. Nasz kod będzie bardziej zwięzły i bezpieczny pod względem wyjątków oraz zarządzania zasobami, nie musimy się tym już ręcznie zajmować i dbać o zwolnienie (konstruktor weźnie to na swoje barki przy wyjściu z zasięgu).

Przy okazji, API w xime prawdopodobnie będzie oparte na technologii podobnej do COM/XPCOM ;)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *