Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Podobné dokumenty
Komponenty v.net. Obsah přednášky

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Softwarové komponenty a Internet

Sdílení dokumentů ve stávajícím informačním systému

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Abstraktní datové typy: zásobník

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Komponentní technologie

Principy objektově orientovaného programování

Spojová implementace lineárních datových struktur

TÉMATICKÝ OKRUH Softwarové inženýrství

Poslední nenulová číslice faktoriálu

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Mělká a hluboká kopie

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Abstraktní třídy, polymorfní struktury

Vytváření a použití knihoven tříd

Funkční objekty v C++.

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Zápis programu v jazyce C#

PROGRAMOVÁNÍ V C++ CVIČENÍ

RMI - Distribuované objekty v Javě

PREPROCESOR POKRAČOVÁNÍ

Komponentní technologie. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

Komponentní technologie

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

PŘETĚŽOVÁNÍ OPERÁTORŮ

Diplomová práce Průmyslová automatizace s využitím OPC

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Technologie JavaBeans

Základní datové struktury

Generické programování

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Komponentní technologie

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Component Object Model

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

IRAE 07/08 Přednáška č. 7. Začátek (head)

Dynamická identifikace typů v C++.

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

Dynamicky vázané metody. Pozdní vazba, virtuální metody

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Architektury informačních systémů

Component Object Model

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Programování v C++ 1, 17. cvičení

Tvorba informačních systémů

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Množina čísel int stl-set-int.cpp

Teoretické minimum z PJV

Správa paměti. Ing. Marek Běhálek katedra informatiky FEI VŠB-TUO A-1018 / marek.behalek@vsb.

Jazyk C# (seminář 3)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Šablony, kontejnery a iterátory

1 Nejkratší cesta grafem

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Architektury informačních systémů

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

UJO Framework. revoluční architektura beans. verze

Správa paměti. Správa paměti. (c)marek Běhálek, Katedra informatiky FEI VŠB-TU Ostrava 1. Motivace. Úrovně správy paměti. Obsah přednášky.

Programování v C++ 3, 3. cvičení

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Programování v C++ První kroky

Jazyk C# a platforma.net

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

ADT/ADS = abstraktní datové typy / struktury

Metody připojování periferií

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

7.5 Diagram tříd pokročilé techniky

Úvod do programovacích jazyků (Java)

Programovací jazyk C# Úvod do programování v C#

Kolekce, cyklus foreach

Programovací jazyk Úvod do programování v C#

PB161 Programování v jazyce C++ Přednáška 10

Programovací jazyk C# Úvod do programování v C#

ADMINISTRACE POČÍTAČOVÝCH SÍTÍ. OPC Server

Jazyk C# (seminář 6)

Více o konstruktorech a destruktorech

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

Programování v C++ 2, 4. cvičení

Vstupní a vstupní proudy v C++

Transkript:

Architektura COM doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.net komponenty Architektura COM 2 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1

Historie 1990 OLE 1.0 (Object Linking and Embedding) strukturované dokumenty Příklad: vložení grafu z Excelu do Wordu 1991 Visual Basic 1.0 - VBX 1993 OLE 2.0, COM (Component Object Model) Využito ve Windows 3.1, základ pro Windows 95 1994 OLE controls (OCX) 1996 ActiveX, DCOM (Distributed COM) Architektura COM 3 Historie 2000 COM+ (Windows 2000) Distribuované komponenty Farmy komponent MTS (MS Transaction Server) 2002.NET Framework Zachována návaznost na COM Architektura COM 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2

Component Object Model (COM) Globální identifikace komponent a jejich rozhraní (GUID) 16 byte 10 19 kombinací {3F2504E0-4F89-11D3-9A0C-0305E82C3301 Algoritmus již nezahrnuje MAC adresu (bylo možné vystopovat autora dokumentu červ Melissa) Binární kompatibilita + vazby na jazyky Počítání referencí jednoduchá správa paměti Komponenta implementuje více rozhraní Architektura COM 5 Typy komponent in-process běží ve stejném adresovém prostoru a na stejném procesoru jako aplikace (.DLL) out-of-process běží v samostatném adresovém prostoru nebo na samostatném serveru (.EXE) vyžadují zajištění přenosu požadavků a výsledků (marshalling, serializace) komunikace s komponentou prostřednictvím zástupce (proxy, stub) Architektura COM 6 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3

Komunikace s komponentami in-process component Architektura COM 7 Komunikace s komponentami out-of-process component Architektura COM 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4

Rozhraní komponenty C++ tabulka virtuálních metod Architektura COM 9 Rozhraní komponenty v C struct Komponenta { void** _vmt; // ukazatel na VMT int var_1; // další instanční proměnné int var_2;... ; // implementace metod void Komponenta_metoda1( struct Komponenta* _this, int arg) {... int Komponenta_metoda2( struct Komponenta* _this) {... // tabulka virtuálních metod void* Komponenta vmt[] = { Komponenta_metoda1, Komponenta_metoda2 ; Architektura COM 10 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5

Rozhraní IUnknown Jak získat přístup ke konkrétnímu rozhraní? Každá COM komponenta implementuje rozhraní IUnknown Metody: QueryInterface vrátí adresu VMT pro rozhraní se zadaným GUID AddRef zvýší počitadlo odkazů na komponentu Release sníží počitadlo a příp. uvolní z paměti Architektura COM 11 Příklad generátor náh. čísel // Soubor IRandom.h #pragma once #include "unknwn.h" // {CB8DF8CB-3F6C-4c02-A587-18566C28487B DEFINE_GUID(IID_IRandom, 0xcb8df8cb, 0x3f6c,0x4c02,0xa5,0x87,0x18,0x56,0x6c,0x28,0x48,0x7b); interface IRandom : IUnknown { virtual HRESULT STDMETHODCALLTYPE Start( int seed) = 0; virtual HRESULT STDMETHODCALLTYPE Next( int *val) =0; ; Architektura COM 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6

Příklad generátor náh. čísel #pragma once #include "IRandom.h class CRandomImpl : public IRandom { public: // IUnknown STDMETHODIMP QueryInterface(REFIID, void **); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IRandom STDMETHODIMP Start(int seed); STDMETHODIMP Next(int* result); private: ULONG m_refcnt; ULONG m_seed; ; Architektura COM 13 Příklad generátor náh. čísel #define INITGUID #include "IRandom.h" #include <iostream> using namespace std; void main(int argc, char** argv) { // inicializace COM HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) {... // vytvoření instance komponenty IRandom *prnd = NULL; hr = CoCreateInstance(CLSID_RandomImpl, NULL, CLSCTX_ALL, IID_IRandom, (void **)&prnd); if (FAILED(hr)) {... // použití komponenty prnd->start(1234); // uvolnění komponenty prnd->release(); // finalizace COM CoUninitialize(); Architektura COM 14 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7

Příklad generátor náh. čísel Option Explicit On Module RandomTest VB.NET Sub Main() Dim rnd As RandomLib.IRandom Dim val As Integer rnd = New RandomLib.RandomImpl rnd.start(1234) For i As Integer = 0 To 9 rnd.next(val) Console.WriteLine("{0: {1", i, val) Next End Sub End Module Architektura COM 15 COM komponenty v.net K dispozici jsou metadata nepotřebujeme IUnknown Implementace komponent jsou odvozeny od System.EnterpriseServices.ServicedComponent namespace RandomCs { public interface IRandom { void Start(int seed); int Next(); Architektura COM 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 8

COM komponenty v.net using System; using System.EnterpriseServices; namespace RandomCs { public class Random: ServicedComponent, IRandom { private int m_seed = 0; public void Start(int seed) { m_seed = seed; public int Next() { m_seed = m_seed * 3925 + 28347; return m_seed & 0xffff; Architektura COM 17 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 9