com / dcom

11
1 Concept et historique 2 L’interface IUnknown 3 L’interface IClassfactory 4 L’interface IDispatch 5 Un petit composant COM 6 Conclusion 7 Bibliographie

Upload: orea

Post on 11-Jan-2016

54 views

Category:

Documents


0 download

DESCRIPTION

Com / DCom. 1 Concept et historique 2 L’interface IUnknown 3 L’interface IClassfactory 4 L’interface IDispatch 5 Un petit composant COM 6 Conclusion 7 Bibliographie. 1 Concept et Historique. 1.1 Historique. 1985 Presse Papier DDE. 80’s début de l’informatique répartie. 1992 OLE 1. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Com / DCom

1 Concept et historique

2 L’interface IUnknown

3 L’interface IClassfactory

4 L’interface IDispatch

5 Un petit composant COM

6 Conclusion

7 Bibliographie

Page 2: Com / DCom

1 Concept et Historique

80’s début de l’informatique répartie

1992 OSF RPC DCE

1985 Presse PapierDDE

1992 OLE 1

1995 COM

1996 DCOM

1.1 Historique

Page 3: Com / DCom

1.2 Concept

Chaque composant COM/DCOM est représenté par un identifiant unique codé sur 128bits.

COM/DCOM, est un envirronement de programmation répartie. Un objet COM/DCOMest représenté par son interface aux yeux de “l’utilisateur”.

Un Objet COM/DCOM, peut être instancié de trois façons différentes

- Intra processus- local- distant

L’utilisateur peut préciser quelle type d’intance il souhaite. S’il ne le fait pas, c’estl’instance par defaut qui est prise en compte (celle ci est définie par les enrgistrementsdans la base de registre).

Page 4: Com / DCom

2 IUnknown

IUnknown est l’interface de base que doit implementer tout composant COM / DCOMElle possède trois interfaces :

- QueryInterface- AddRef- Release

C’est par cette interface que l’on peut instancier un composant COM/DCOM.

Voici la definition en IDL de Iunknown

[local, object, uuid(00000000-0000-0000-c000-000000000046), pointer_ default(unique)]

interface IUnknown{

typedef [unique] IUnknown * LPUNKNOWN;HRESULT QueryInterface ( [in] REFIID riid, [out, iid_is(riid)] void ** ppvObject );ULONG AddRef ();ULONG Release ();

}

Page 5: Com / DCom

2.1 QueryInterface

Cette méthode est celle qui nous permet d’obtenir un pointeur d’interface vers l’objetCOM/DCOM dont nous possédons l’ID.

Le pointeur d’interface est retourné en second paramêtre.

2.2 AddRef

Cette méthode permet d’indiquer au système quand l’utilisateur ajoute un pointeur sur l’interface utilisée.

2.3 Release

Cette méthode permet d’indiquer au système quand l’utilisateur enleve un pointeur sur l’interface utilisée. Si le pointeur suprimé est le dernier, alors Release detruit l’intancede l’bojet instancié.

Page 6: Com / DCom

3 IClassFactory

Cette interface contient deux méthodes destiné à traité avec des d’objets COM (leurs instances).

Cette interface contient deux méthodes :

- CreateInstance- LockServer

CreateInstance a pour but d’instancier des Objets qu’ils soient distants ou locaux.

La fonction LockServer permet de mettre l’Objet en mémoire afin de l’instancierau plus vite.

Page 7: Com / DCom

4 IDispatch

L’interface IDispatch est interessante car elle permet d’utiliser un objet COM/DCOMdans des langages comme VB, ASP, JScript qui ne permettente pas de manipuler les pointeurs d’interface.

Elle permet entre autre de d’obtenir la position de la méthode dans la v-table.Pour ce faire, il faut utiliser deux méthodes définient par cette interface.

- GetIDsOfNames, qui retourne le numéro correspondant à la fonctiondéfinie par la chaine de caractère passée en parmètre

- Invoke qui permet de passer à la fonction dont on a obtenu le numéro

Page 8: Com / DCom

5 Un petit composant COM

Après ces explications, nous allons créer notre composant COM. Celui ci nous permettrade réaliser la somme de deux entier x et y. Nous créons ce composant à l’aide de Visual C++ 6.0

Voici l’interface idl de notre composant :

import “unknwn.idl”;[ object, uuid(10000001-0000-0000-0000-000000000001) ]

interface Isum : IUnknown{

HRESULT Sum([in] int x, [in] int y, [out, retval] int* retval);};

Pour le compiler, on clique droit sur le fichier puis sur compile Isum.idlle compilateur MIDL génère les fichier ISum.h, ISum_i.c et ISum_d.c

Page 9: Com / DCom

Une fois l’interface COM/DCOM obtenue, il nous reste à implémenter un objetqui implémente cette interface. Nous appelons cet class CInsideDCom

class CInsideDCom : public ISum {public:

// IUnknownULONG __stdcall AddRef ();//incrémente m_cRefULONG __stdcall Release ();//decremente m_cRef s’il est à 0 detruit l’objetHRESULT __stdcall QueryInterface ( REFIID riid, void** ppv );

// ISumHRESULT __stdcall Sum ( int x, int y, int* retval );

CInsideDCom();virtual ~CInsideDCom();

private:ULONG m_cRef;//compte le nombre d’intances

};

Page 10: Com / DCom

6 Conclusion

Les avantages de Com/Dcom- environnement abouti- permet un liaison avec de nombreux langages (C++, Java, Vb, VBScript, Jscript, ...)- sécurité implémenté- Basé sur DCE

Inconvénients- Propriétaire MicroSoft- ne troune que sur plateforme Win32- Pas de soutien externe à MicroSoft- La seule tentative de portage (Solaris) fut un échec

Comment se place Com/Dcom par rapport à Corba

Page 11: Com / DCom

7 Bibliographie

Pour réaliser cette présentation, je me suis appuyé sur les ouvrages suivants :

- Au coeur de DCOM de Guy et Henry Eddonaux editions Microsoft Press

- Inside OLE de Kraig Brockschmidtaux editions Microsoft Press

Je me suis également appuyée sur la documentation électronique fournie parmicrosoft : MSDN