X


[ Pobierz całość w formacie PDF ]
.C++), może byćróżny od języka, w którym chcemy uzyskać jej importowaną wersję (np.Object Pascala).Podstawowym powodem, dla którego udostępnia się biblioteki typów, jest możliwość uzyskaniaspecyficznych dla danego języka deklaracji używanych typów i komponentów  komponenty stają sięwówczas samodokumentujące i to na dowolnej platformie projektowej (o ile, rzecz jasna, posiada onafunkcje importowania bibliotek typów). 32Przegląd wygenerowanych konstrukcji C++Przyjrzyjmy się bliżej plikowi ZodiacServer_TLB.h, wygenerowanemu przez kreator importowy izawierającemu deklarację używanych przez bibliotekę koklas i interfejsów.Wydruk 12.11 przedstawiafragment tego pliku dotyczący interfejsów IZodiac i IDetailedZodiac.Wydruk 12.11.Deklaracje interfejsów IZodiac i IDetailedZodiac w plikuZodiacServer_TLB.h&&interface IZodiac : public IDispatch{public:virtual HRESULT STDMETHODCALLTYPE GetZodiacSign(long Day/*[in]*/,long Month/*[in]*/,BSTR* Sign/*[out,retval]*/) = 0; // [1]virtual HRESULT STDMETHODCALLTYPE GetZodiacSignAsync(long Day/*[in]*/,long Month/*[in]*/) = 0; // [2]#if !defined(__TLB_NO_INTERFACE_WRAPPERS)BSTR __fastcall GetZodiacSign(long Day/*[in]*/, long Month/*[in]*/){BSTR Sign = 0;OLECHECK(this->GetZodiacSign(Day, Month, (BSTR*)&Sign));return Sign;}#endif // __TLB_NO_INTERFACE_WRAPPERS};&&interface IDetailedZodiac : public IUnknown{public:virtual HRESULT STDMETHODCALLTYPE GetDetailedZodiacSign(long Day/*[in]*/,long Month/*[in]*/,Zodiacserver_tlb::TDetailedZodiacSign*DetailedSign/*[out]*/) = 0; // [1]virtual HRESULT STDMETHODCALLTYPE GetDetailedZodiacSignAsync(long Day/*[in]*/, long Month/*[in]*/) = 0; // [2]};& 33&Nietrudno zauważyć informację o pochodzeniu obydwu interfejsów: IZodiac, jako interfejs dualny,wywodzi się z IDispatch, natomiast  klasyczny interfejs IDetailedZodiac wywodzi się zIUnknown.W ramach interfejsu IZodiac widzimy również drugą, przeciążoną postać metodyGetZodiacSign().Wynikowy łańcuch jest tutaj wprost wynikiem funkcji, w odróżnieniu odpierwotnego aspektu, przekazującego ów łańcuch przez trzeci parametr, rezerwując dla wyniku (typuHRESULT) informację o powodzeniu lub niepowodzeniu operacji.Drugi, przeciążony aspekt funkcji itak korzysta z owego pierwotnego aspektu, kontrolując poprawność jego wywołania (tj.zwróceniewartości 0) za pomocą makra OLECHECK.Niestety, makro OLECHECK implementowane jest jako połączenie obsługi błędów z generowaniemasercji, nie wykorzystując przy tym interfejsu IErrorInfo, którego metody serwer mógłbyimplementować (jak czyni to serwer ZodiacServer).Produkowany przez makro komunikat,zawierający werbalny opis zaistniałego wyjątku, jest więc raczej użyteczny jedynie dla celówśledzenia aplikacji, nie zaś dla potrzeb projektanta aplikacji COM.Jako alternatywę dla makra OLECHECK umieściliśmy na załączonej płycie CD-ROM plikComThrow.h, zawierający kilka map przydatnych w obsłudze błędów zaistniałych w aplikacjachCOM.Oprócz implementacji wspomnianych makr plik ten zawiera również opis ich użycia wraz zprostymi przykładami.Aby uprościć projektowanie aplikacji klienta, zamiast bezpośrednich odwołań do interfejsówzastosowaliśmy specjalne klasy  szablony, stanowiące dla tych interfejsów swoiste otoczki i z tegowzględu zwane  eleganckimi interfejsami (ang.smart interfaces)  zamiast bowiem interfejsów mamydo czynienia z wygodniejszymi klasami C++.Przykład takiego  eleganckiego interfejsu TCOMIZodiac  przedstawia wydruk 12.12.Wydruk 12.12.Deklaracja  eleganckiego interfejsu TCOMIZodiactemplateclass TCOMIZodiacT : public TComInterface, publicTComInterfaceBase{public:TCOMIZodiacT() {}TCOMIZodiacT(IZodiac *intf, bool addRef = false) : TComInterface(intf,addRef) {}TCOMIZodiacT(const TCOMIZodiacT& src) : TComInterface(src) {}TCOMIZodiacT& operator=(const TCOMIZodiacT& src) { Bind(src, true); return*this;}HRESULT __fastcall GetZodiacSign(long Day/*[in]*/,long Month/*[in]*/,BSTR* Sign/*[out,retval]*/);BSTR __fastcall GetZodiacSign(long Day/*[in]*/,long Month/*[in]*/);HRESULT __fastcall GetZodiacSignAsync( 34long Day/*[in]*/,long Month/*[in]*/);};typedef TCOMIZodiacT TCOMIZodiac;TCOMIZodiac jest konkretyzacją szablonu TCOMIZodiacT; cenę płaconą za wygodę użytkowaniastanowi tu kilka dodatkowych metod i operatorów.Najważniejsze z operatorów dziedziczone są zszablonu TComInterface, którego konkretyzacja TComInterface jest jednym zprzodków klasy TCOMIZodiacT [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • czarkowski.pev.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.