X


[ Pobierz całość w formacie PDF ]
.Do ich implementacji u�yli�my mianowicie funkcjiAtlAdvise() i AtlUnadvise() pochodz�cych z biblioteki ATL.Przepis na definiowanie w�asnej klasy reprezentuj�cej uj�cie zdarze� na bazieszablonu TCustomSink jest nast�puj�cy:Nale�y zdefiniowa� obiekt COM na bazie klas CComObjectRootEx (alboCComObjectRoot) oraz CComCoClass.Nale�y uczyni� implementowany interfejs zdarzenia kolejn� klas� bazow� obiektui oczywi�cie stworzy� implementacj� metod tego interfejsu.Zdefiniowa� typ w�asnego uj�cia zdarze�, na przyk�ad:typedef TCustomSink TMyCreatableSink;Ilustracj� powy�szego przepisu jest wydruk 12.18, na którym przedstawiono klas�TDetailedZodiacSinkImpl implementuj�c� uj�cie zdarze� ZodiacCustomSink dlainterfejsu IDetailedZodiacEvents.Zawarto�� tego wydruku znajduje si� w plikuZodiacCustomSink.h na za��czonej p�ycie CD-ROM.Wydruk 12.18.Deklaracja klasy implementuj�cej uj�cie zdarze� dla interfejsuIDetailedZodiacEvents#if !defined(ZODIACCUSTOMSINK_H__)#define ZODIACCUSTOMSINK_H__#include#include#include#include#include#include "CustomSinks.h"#include "ZodiacServer_TLB.h"typedef void __fastcall (__closure * TDetailedZodiacSignReadyEvent)(TDetailedZodiacSign& DetailedSign);//---------------------------------------------------------------------------// Klasa implementuj�c� interfejs IDetailedZodiacEventsclass ATL_NO_VTABLE TDetailedZodiacSinkImpl :public CComObjectRootEx,public CComCoClass,public IDetailedZodiacEvents{public:TDetailedZodiacSinkImpl() :FOnDetailedZodiacSign(NULL){}DECLARE_THREADING_MODEL(otApartment);BEGIN_COM_MAP(TDetailedZodiacSinkImpl)COM_INTERFACE_ENTRY(IDetailedZodiacEvents)END_COM_MAP()protected:// Wska�nik funkcji zdarzeniowejTDetailedZodiacSignReadyEvent FOnDetailedZodiacSign;public:__property TDetailedZodiacSignReadyEvent OnDetailedZodiacSign ={ read = FOnDetailedZodiacSign, write = FOnDetailedZodiacSign };// IDetailedZodiacEventspublic:STDMETHOD(OnDetailedZodiacSignReady(TDetailedZodiacSign* DetailedSign)){if (FOnDetailedZodiacSign != NULL)FOnDetailedZodiacSign(*DetailedSign);return S_OK;}};typedef TCustomSinkTZodiacCustomSink;#endif //ZODIACCUSTOMSINK_H__Czytelnicy spostrzegli zapewne, i� do budowy aplikacji klienta u�yli�my tychsamych klas i makr biblioteki ATL, z których korzystali�my ju� przy budowieserwera.Jest tu jednak pewna ró�nica � nie jest konieczne tworzenie mapy COM,bowiem aplikacja klienta nie b�dzie tworzy� egzemplarzy obiektu COM; z tegosamego powodu nieistotny jest CLSID tego� obiektu, dlatego te� zamiast niegou�yli�my zerowego identyfikatora CLSID_NULL.Maj�c ju� zdefiniowan� klas� TZodiacCustomSink, nale�y zrobi� z niej u�ytek wprojekcie aplikacji � klienta.Podobnie jak w przypadku klasy TZodiacSink,nale�y najpierw doda� odpowiednie pole do formularza g�ównego:private:�TZodiacCustomSink FZodiacCustomSink;Nast�pnie nale�y zdefiniowa� metod� formularza, obs�uguj�c� zdarzenie:OnDetailedZodiacSignReady:void __fastcall TMainForm::OnDetailedZodiacSignReady(TDetailedZodiacSign& DetailedSign){memLog->Lines->Add(_T("Zodiac detailed information (ASYNCHRONOUS):"));memLog->Lines->Add(_T(" Sign = ") + AnsiString(DetailedSign.Sign));memLog->Lines->Add(_T(" House = ") + IntToStr(DetailedSign.House));memLog->Lines->Add(_T(" Type = ") + AnsiString(DetailedSign.Element));memLog->Lines->Add(_T(" Planet = ") + AnsiString(DetailedSign.Planet));memLog->Lines->Add(_T(" Details = ") + AnsiString(DetailedSign.Details));memLog->Lines->Add(_T(" Tip = ") + AnsiString(DetailedSign.Advice));memLog->Lines->Add(_T(""));}po czym zwi�za� t� metod� z odpowiednim zdarzeniem klasy wskazywanej przez poleFZodiacCustomSink oraz zapewni� automatyczne po��czenie z serwerem, dopisuj�cdo funkcji zdarzeniowej TMainForm::FormCreate nast�puj�c� sekwencj�instrukcji:FZodiacCustomSink.OnDetailedZodiacSign = OnDetailedZodiacSignReady;FZodiacCustomSink.Connect(FZodiac);Na tym ostatecznie zako�czyli�my budow� aplikacji klienta � i jednocze�nieprezentacj� projektów ilustruj�cych podstawowe elementy technologii COM.Literatura zalecanaCzytelnikom zainteresowanym szczegó�ami technologii COM i jej zwi�zkami zC++Builderem Autorzy wydania oryginalnego polecaj� nast�puj�ce pozycje:Na temat programowania w C++Builderze:Kent Reisdorph i in.C++Builder 4 Unleashed, wyd.Sams Publishing 1999,ISBN 0-672-31510-6;Na temat technologii COM/COM+:Dale Rogerson Inside COM, wyd.Microsoft Press 1997,ISBN 1-57231-349-8;Guy Eddon, Henry Eddon Inside Distributed COM, wyd.Microsoft Press 1998,ISBN 1-57231-849-X;David S.Platt Understanding COM+, wyd.Microsoft Press 1999,ISBN 0-7356-0666-8;Ash Rofail, Yasser Shohoud Mastering COM and COM+, wyd.Sybex Inc.,ISBN 0-7821-2384-8;Na temat szczegó�ów biblioteki ATL:Brent Rector, Chris Sells ATL Internals, wyd.Addison Wesley 1999,ISBN 0-201-69589-8;O ciekawych zagadnieniach pokrewnych:Eric Harmon Delphi COM Programming, wyd.Macmillan Technical Publishing 2000,ISBN 1-57870-221-6;Zasoby internetowe:nntp://forums.inprise.com/borland.public.cppbuilder.activex;http://community.borland.com/cpp;http://www.cetus.links.org/oo_ole.html;http://www.techvanguards.com;http://msdn.microsoft.com.By� mo�e HELION b�dzie chcia� zweryfikowa� t� list� lub co� do niej doda�.PodsumowanieTechnologia COM nie stanowi zamkni�tej ca�o�ci.Tworzenie komponentów COM napotrzeby np.przetwarzania du�ych baz danych, sterowania urz�dzeniami itp.staje si� czynno�ci� w miar� nieskomplikowan� dopiero wówczas, gdy potraktujesi� narz�dzie projektowe (C++Builder) jako ca�o��, nie za� tylko pod k�tem ichwspó�pracy z mechanizmami COM.W tym rozdziale zaprezentowali�my wykorzystanie elementów COM na gruncieC++Buildera, tworz�c dwie wspó�pracuj�ce ze sob� aplikacje � serwer i klient [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • listy-do-eda.opx.pl
  • Drogi użytkowniku!

    W trosce o komfort korzystania z naszego serwisu chcemy dostarczać Ci coraz lepsze usługi. By móc to robić prosimy, abyś wyraził zgodę na dopasowanie treści marketingowych do Twoich zachowań w serwisie. Zgoda ta pozwoli nam częściowo finansować rozwój świadczonych usług.

    Pamiętaj, że dbamy o Twoją prywatność. Nie zwiększamy zakresu naszych uprawnień bez Twojej zgody. Zadbamy również o bezpieczeństwo Twoich danych. Wyrażoną zgodę możesz cofnąć w każdej chwili.

     Tak, zgadzam się na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerów w celu dopasowania treści do moich potrzeb. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

     Tak, zgadzam się na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerów w celu personalizowania wyświetlanych mi reklam i dostosowania do mnie prezentowanych treści marketingowych. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

    Wyrażenie powyższych zgód jest dobrowolne i możesz je w dowolnym momencie wycofać poprzez opcję: "Twoje zgody", dostępnej w prawym, dolnym rogu strony lub poprzez usunięcie "cookies" w swojej przeglądarce dla powyżej strony, z tym, że wycofanie zgody nie będzie miało wpływu na zgodność z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.