Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
COM Maciej Głowacki
2
Aplikacja monolityczna
Kod źródłowy Kompilacja Linkowanie Wywołanie Funkcji Aplikacja Biblioteka statyczna Biblioteka dll System operacyjny
3
Aplikacja + biblioteka statyczna
duży rozmiar kodu wynikowego każda aplikacja korzystająca z biblioteki posiada ją w sobie duże kłopoty przy zmianie kodu biblioteki Wywołanie Funkcji Aplikacja Biblioteka statyczna
4
Aplikacja + biblioteka dll
kłopoty przy zmianie kodu biblioteki Wywołanie Funkcji Aplikacja Biblioteka dll
5
Co robi COM ? Aplikacja Aplikacja Wywołanie Funkcji Biblioteka dll
Biblioteka statyczna Wywołanie Funkcji System operacyjny Biblioteka Wywołanie Funkcji Aplikacja System operacyjny
6
Ewolucja oprogramowania
Zintegrowane środowisko obiektów zgodnych z COM Zestawy programów ? 1985 1996 2000 2003 Pojedyncze aplikacje
7
Co to jest COM ? COM (Component Object Model)
specyfikacja jak tworzyć komponenty binarne komponenty gotowe do użycia niezależne od języka programowania ułatwia wersjowanie Interfejsy Komponent
8
Biblioteka komponentów
Zalety COM Szybkie tworzenie aplikacji RAD (Rapid Apllication Developer) A B A B Aplikacja 1 C D D A Aplikacja 2 Biblioteka komponentów
9
Zalety COM Niezależność od języka programowania
Smalltalk, Java, Python, Power Builder Działa tam gdzie jest zaimplementowany Windows, Macintosh, UNIX A Komponent napisany w C++ A B B Komponent napisany w Javie Aplikacja
10
Zalety COM Łatwość wersjowania komponentów Łatwa rozszerzalność A
Aplikacja 1 A Add Word Delete Word Aplikacja 2 Nowy interfejs Get Synonim
11
Ponowne użycie
12
Postacie COM Komputer A Klient proces Obiekt Klient
„In-process server”
13
Postacie COM Komputer A Klient Proxy Obiekt Stub Klient proces
Server proces Interprocess
14
Postacie COM Klient Proxy Obiekt Stub Klient proces Server proces RPC
komputer B komputer A
15
HRESULT, GUID i Rejestr HRESULT 32-bitowa liczba
S_... sukces , E_ ... porażka błąd S_OK definiowane jako 0 E_FALSE definiowane jako 1 31 30 16 15 15 bitów 16 bitów Wartość zwracana Dodatkowa informacja Status
16
HRESULT, GUID i Rejestr S_OK - sukces
NOERROR - takie same znaczenie jak S_OK S_FALSE - sukces zwraca false E_NOINTERFACE - nie wspiera interfejsu E_NOTIMPL - funkcja składowa nie istnieje E_FAIL - nieokreślony błąd
17
{D01C25A2-6BF9-11d2-B3E7-CA99FFF43F40}
HRESULT, GUID i Rejestr GUID (Globally Unique Identifier) niepowtarzalny identyfikator każdy interfejs posiada GUID GUIDGEN.EXE + kod źródłowy powtórzy się ok roku Przykład GUID: {D01C25A2-6BF9-11d2-B3E7-CA99FFF43F40}
18
HRESULT, GUID i Rejestr Komputer HKEY_CLASSES_ROOT Rozszerzenia plików
CLSID Przyjazna nazwa komponentu {D01C25A2-6BF9-11d2-B3E7-CA99FFF43F40} Ala GUID InprocServer32 C:\WINDOWS\ARHIVE.DLL Lokalizacja komponentu
19
HRESULT, GUID i Rejestr STDAPI DllRegisterServer()
STDAPI DllUnregisterServer() RegSvr32.exe
20
Interfejs IUnknown Podstawowy interfejs komponentów
Podstawowa funkcja QueryInterface Pytanie o interfejs class IUnknown { public: virtual HRESULT QueryInterface(REFIID iid,void** ppvObj)=0; virtual ULONG AddRef() = 0; virtual ULONG Release() = 0; };
21
Tworzenie komponentu 4 Klient Komponent
Wywołanie funkcji z interfejsu A A wskaźnik do interfejsu A 3 Wywołanie CoCreateIntance (CLSID_X, IID_A) 2 CLSID_X C:\WINDOWS\ALA.DLL CLSID_Y C:\TMP\AS.DLL Rejestr 1 CoCreateInstance Biblioteka COM
22
Fabryka klas CoCreateInstance tworzy komponent
Nie mamy możliwości kontrolowania IClassFactory interfejs tworzący komponenty IClassFactory2 wsparcie dla licencji interface IClassFactory : IUnknown { HRESULT CreateInstance(IUnknown* pUnknownOuther, const IID& iid, void** ppv); };
23
Tworzenie fabryki klas
Fabryka klas Klient CoGetClassObject Biblioteka COM DLL 1 2 DllGetClassObject CoGetClassObject 3 Tworzenie fabryki klas 4 zwraca IClassFactory 5 CreateInstance IClassFactory pIClassFactory 6 7 zwraca IArhive IArhive pIArhive 8 wywołanie funkcji
24
Automatyzacja Chart Wykres Baza danych Arkusz kalkulacyjny Acess Excel
Edytor tekstu Wykres weź dane z bazy obrób je w arkuszu Word zrób wykres wklej do edytora wyślij do szefa Outlok
25
IDispatch DISPID 1 2 3 „ala” „azor” „PrintLabel” ... GetTypeInfo
GetTypeInfoCount GetIDsOfNames 1 2 3 &ala Invoke &azor &PrintLabel DISPID
26
Tworzenie zdalnego komponentu
Klient Komponent 5 A 4 Wywołanie CoCreateIntance (CLSID_X, IID_A) 1 Rejestr CLSID_X C:\ALA.DLL 3 CoCreateInstance Biblioteka COM Rejestr CLSID_X softsystem.pl 2 CLSID_Y C:\TMP\AS.DLL
27
Tworzenie zdalnego komponentu
Klient Komponent 4 A 3 1 Wywołanie CoCreateIntanceExt (CLSID_X,IID_A,softsystem.p) Rejestr CLSID_X C:\ALA.DLL CoCreateInstance Biblioteka COM 2
28
Jak stworzyć COMa Klasyczne C++ Klasy MFC Biblioteka ATL inne ?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.