WYKŁADY (SEMESTR 7)

Poniższe jednostki tematyczne nie muszą odpowiadać jednostkom godzinowym wykładów   

>>> Materiały do pobrania (zestawienie)

Dokumenty:

Kod źródłowy:

listingi programów dla tematów 2 - 7 (11 stron, 76 KB)
listingi programów dla tematów 8 - 9 (6 stron, 38 KB)
wszystkie programy źródłowe dla tematów 2 - 7 (cpp2com.zip)
wszystkie programy źródłowe dla tematów 8 - 9 (calc.zip)

1. Pojęcia podstawowe

Wykład wprowadzający.

Wprowadzone koncepcje i techniki:

  • COM, OLE, ActiveX
  • programowanie składnikowe
  • polimorfizm, hermetyzacja i dziedziczenie w technikach składnikowych

Materiały do pobrania:

2. Składniki i interfejsy

Wykład przedstawia najprostsze podejście: w pojedynczym pliku źródłowym część kodu odpowiadająca klientowi korzysta wprost z klasy C++ implementującej składnik. Podejście to nie zawiera żadnych elementów technologii COM.

Wprowadzone koncepcje i techniki:

  • składniki, interfejsy i wskaźniki do interfejsów

Materiały do pobrania:

Kody żródłowe:

3. Interfejs IUnknown

W prezentowanym tu podejściu zastosowano interfejs IUnknown by częściowo uniezależnić kod źródłowy klienta od kodu serwera. Wszystko, co klient musi wiedzieć o używanych przez siebie składnikach, to definicja implementowanych przez nie interfejsów oraz identyfikatory IID. Wskaźniki na potrzebne interfejsy klient otrzymuje za pośrednictwem funkcji IUnknown::QueryInterface - zgodnie ze standardem COM. Słabym punktem rozwiązania pozostaje funkcja o nazwie CreateInstance, której zadaniem jest dostarczenie egzemplarza obiektu o interfejsie IUnknown. Funkcja ta jest implementowana przez serwer, jednak klient wciąż musi się do niej odwoływać poprzez statyczne linkowanie.

Wprowadzone koncepcje i techniki:

  • wskaźników do interfejsów - koncepcja zgodna z technologią COM
  • interfejs IUnknown i funkcja QueryInterface
  • zliczanie wystąpień (AddRef / Release)
  • identyfikatory interfejsów IID

Materiały do pobrania:

Kody żródłowe:

W podejściu 2a wprowadzono rozdzielną kompilację klienta (exe) i serwera (dll). Należy niezależnie skompilować projekty Client i Server i dopilnować, by wygenerowany w ramach projektu Server plik dll był widoczny dla programu typu exe.

4. Fabryki klas

Rozwiązanie tu przedstawione to już faktyczny klient i serwer COM. Klient odwołuje się do serwera poprzez jego CLSID, przy pomocy funkcji CoCreateInstance. Rezydujący w module DLL serwer to w pełni funkcjonalny serwer COM.

Wprowadzone koncepcje i techniki:

  • serwery i klienci COM
  • funkcja CoCreateinstance
  • identyfikatory CLSID
  • fabryka klas - IClassFactory
  • dostęp do fabryki klas - Funkcja DllGetClassObject
  • rejestracja COM - funkcje DllRegisterServer i DllUnregisterServer
  • kontrola obecności w pamięci - funkcja DllCanUnloadNow

Materiały do pobrania:

Kody żródłowe:

Uwagi o kompilacji:należy niezależnie skompilować projekty Client i Server, a następnie zarejestrować wygenerowany w ramach projektu Server plik dll (poprzez użycie opcji Tools|Register Control w Visual Studio lub wywołanie programu regsvr32).

5. Tworzenie składników wewnątrzprocesowych

Przedstawione rozwiązanie kodu źródłowego nie odbiega zanadto od poprzedniego. Główna różnica polega na zastosowaniu pliku IDL. W wyniku jego kompilacji powstają między innymi pliki zawierające definicje interfejsów (mytypes.h) oraz identyfikatorów GUID (mytypes_i.c), które zastepują wcześniej używane pliki interface.h i guid.cpp. Wykład uzupełnia i porządkuje informacje dotyczące tworzenia serwerów wewnątrzprocesowych.

Wprowadzone koncepcje i techniki:

  • Pliki IDL

Materiały do pobrania:

Kody żródłowe:

Uwagi o kompilacji:przed skompilowaniem projektu należy skopiować plik VCVARS32.BAT z katalogu vc98/bin pakietu Visual Studio 6 (np. c:/program files/Microsoft Visual Studio/VC98/Bin) do głównego katalogu projektu (w miejsce istniejącego pliku o takiej samej nazwie), a następnie wywołać polecenie run_midl.bat celem skompilowania pliku typu IDL. Następnie należy niezależnie skompilować projekty Client i Server, a na koniec zarejestrować wygenerowany w ramach projektu Server plik dll (poprzez użycie opcji Tools|Register Control w Visual Studio lub wywołanie programu regsvr32).

6. Tworzenie składników zewnątrzprocesowych

W tej sekcji przedstawiono serwer zewnątrzprocesowy, rezydujący w pliku EXE, oraz odpowiedni program klienta.

Wprowadzone koncepcje i techniki:

  • szeregowanie (marshaling)
  • wywoływanie serwerów zewnątrzprocesowych
  • tworzenie modułów proxy
  • serwery zewnątrzprocesowe
  • analiza poleceń linii wykonania: /RegServer, /UnregServer i /Embedding
  • rejestrowanie i wyrejestrowywanie fabryk klas (CoRegisterClassObject, CoRevokeClassObject )
  • zarządzanie usuwaniem serwera EXE z pamięci
  • rejestrowanie serwerów zewnątrzprocesowych

Materiały do pobrania:

Kody żródłowe:

Uwagi o kompilacji: przed skompilowaniem projektu należy skopiować plik VCVARS32.BAT z katalogu vc98/bin pakietu Visual Studio 6 (np. c:/program files/Microsoft Visual Studio/VC98/Bin) do głównego katalogu projektu (w miejsce istniejącego pliku o takiej samej nazwie), a następnie wywołać polecenie run_midl.bat celem skompilowania pliku typu IDL. Następnie należy niezależnie skompilować projekty Client, Proxy  i OutProcServer. Na koniec należy zarejestrować wygenerowany w ramach projektu Proxy  plik proxy.dll (poprzez użycie opcji Tools|Register Control w Visual Studio lub wywołanie programu regsvr32) oraz zarejestrować program będący serwerem COM - poprzez uruchomienie go z opcją /RegServer.

7. interfejs IDispatch i automatyzacja

Przedstawiono interfejs IDispatch i interfejsy dispatch (dispinterfejsy), a także interfejsy podwójne (dual). Prezentowany tu kod źródłowy rozszerza poprzednie rozwiązanie w taki sposób, że interfejs IA staje się interfejsem typu dual. Aplikacja kliencka pozostaje bez zmian; dodano nowy program ClientDisp - klienta korzystającego z interfejsu IDispatch oraz ClientVB - klienta napisanego w Visual Basicu.

Wprowadzone koncepcje i techniki:

  • Interfejs IDispatch
  • Interfejsy typu dual
  • Tworzenie serwerów dual z wykorzystaniem obiektów ITypeInfo

Materiały do pobrania:

Kody żródłowe:

8. Zawieranie i agregacja

Wykład przedstawia koncepcję zawierania i agregacji.

Ilustrację dla wykładu stanowi nowy progam przykładowy, który zawiera serwer implementujący prosty kalkulator. W wersji agregowanej dodano nową funkcjonalność (pierwiastkowanie), dziedzicząc resztę implementacji.

Wprowadzone koncepcje i techniki:

  • Zawieranie
  • Agregacja
  • Delegowanie odwołań IUnkonown

Materiały do pobrania:

  • Zawieranie i agregacja (prezentacja PowerPoint) - 3 folie na stronę (1 strona, 129 KB)
  • Zawieranie i agregacja oraz punkty połączeń (prezentacja PowerPoint) - 6 folii na stronę (1 strona, 165 KB)

Kody żródłowe:

9. Punkty połączeń

Wykład przedstawia koncepcję punktów połączeń.

Ilustracją wykładu jest rozbudowa przykładowego programu z poprzedniego punktu (prostego kalkulatora) o obsługe punktów połączeń. Umożliwiło to wykorzystanie mechanizmu zdarzeń (events) na poziomie programu w Visual Basicu.

Wprowadzone koncepcje i techniki:

  • Interfejs IConnectionPoint
  • Interfejs IConnectionPointContainer

Materiały do pobrania:

  • Punkty połączeń (prezentacja PowerPoint) - 3 folie na stronę (1 strona, 165 KB)
  • Zawieranie i agregacja oraz punkty połączeń (prezentacja PowerPoint) - 6 folii na stronę (1 strona, 137 KB)

Kody żródłowe:

10. Wielowątkowość (Wykład opracowany przez Marka Mittmanna)

Wykład przedstawia kwestie związane z wielowątkowością w technologii COM.

Wprowadzone koncepcje:

  • Wątki i przedziały
  • Przedziały jednowątkowe, wielowątkowe i neutralne
  • Przypisywanie do przedziałów
  • Współdziałanie przedziałów
  • Przekazywanie interfejsów pomiędzy przedziałami

Materiały do pobrania:

11. Kategorie komponentów

Wprowadzone koncepcje i techniki:

  • Kategorie komponentów
  • Domyślne klasy i emulacja klas
  • Zarządca kategorii komponentów (Component Categories Manager)

Materiały do pobrania:

12. Trwałość obiektów

Wprowadzone koncepcje i techniki:

  • Rodzina interfejsów IPersist
  • Interfejs IPersistStream/IPersistStreamInit
  • Zapis i odczyt trwałych obiektów
  • Zestawy właściwości (property bags)

Materiały do pobrania:

13. Monikery

Wprowadzone koncepcje i techniki:

  • Monikery - istota działania
  • Monikery standardowe
  • Interfejs IMoniker
  • Stosowanie nazw symbolicznych
  • Dowiązywanie obiektów
  • Monikery złożone
  • Zastosowanie monikerów w technologii OLE Linking

Materiały do pobrania:

14. Technologia OLE

Wprowadzone koncepcje i techniki:

  • OLE: pojęcia podstawowe
  • Osadzanie: struktura obiektu magazynowego IStorage
  • Interfejsy strony kontenera i sewera
  • Aktywacja w miejscu
  • Łączenie

Materiały do pobrania:

15. Technologia ActiveX

Wprowadzone koncepcje i techniki:

  • Kontrolki VBX, OLE Controls, specyfikacja ActiveX
  • Udostępnianie interfejsu użytkownika
  • Zdarzenia
  • Metody
  • Właściwości

Materiały do pobrania:

16. Aspekty praktyczne i biblioteka ATL

Wykład przedstawia kilka koncepcji uproszczenia pracy programisty, a także wprowadza w programowanie z wykorzystaniem biblioteki ATL - Active Template Library

Wprowadzone koncepcje i techniki:

  • koncepcja "inteligentnych wskaźników" (smart pointers)
  • ułatwienia w implementacji interfejsu IUnknown i fabryki klas
  • biblioteka ATL - Active Template Library

Materiały do pobrania:

LABORATORIUM (SEMESTR 7)

LABORATORIUM (SEMESTR 8)


Ta strona jest częścią strony domowej Jarosława Francika.
Copyright © 2000-02 by Jaroslaw Francik
Data ostatniej modyfikacji: 19/11/02