Vous êtes sur la page 1sur 35

Windows NT/2000/XP Enjeux et contraintes techniques

Cinquime partie COM et OLE

C. Casteyde

Document diffus sous licence GNU FDL

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Component Object Model

La technologie Microsoft porte plusieurs noms :


(D)COM(+) (Distributed Component Object Model), OLE (Object Linking and Embedding), ActiveX.

Initialement prvue pour l'intgration et la liaison de documents tendue pour constituer un vritable ORB

Visual Basic, base de nombreuses technologies.

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Les composants

Extension de la notion d'objet :


indpendance du langage (VB, C++, scripts), rutilisation de code. in-process (DLL), excutables (EXE).

Implmentation possible dans des serveurs :


Transparence rseau

Interfaces COM

Les fonctionnalits sont bases sur les interfaces Les interfaces exposent les fonctionnalits des objets Les interfaces COM sont dfinies au niveau binaire Implmentation indpendante du langage Mais ncessite des langages compatibles Spcifique la plate-forme

Interfaces COM
Pointeur de tableau de pointeurs de fonctions Drivent toutes de l'interface IUnknown Implmentes nativement en C++ par des classes abstraites (structure de V-table) Implmentes en Visual Basic en natif Passerelles pour les objets .Net (quasi natif)

Notion de Vtable
Interface &VTable Code et donnes privs de l'objet/proxy VTable &Mthode1 &Mthode2 &Mthode3 ... &Mthoden Mthode n

Mthode 1

Mthode 2

L'interface IUnknown

IUnknown est la base de toutes les interfaces Permet la gestion de la dure de vie :

utilisation d'un compte de rfrences, mthodes AddRef() et Release(). mthode QueryInterface pour obtenir une autre interface, dtermination dynamique des fonctionnalits.

Point d'entre pour les autres fonctionnalits :


L'interface IUnknown

IUnknown AddRef Release QueryInterface

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Langage IDL
Le langage IDL de Microsoft permet :

de dcrire les interfaces, de dcrire les classes de composants. les en-ttes C/C++, une bibliothque de types, le code C du proxy et du stub.

Permet de gnrer :

Exemple IDL
// Interface : interface ICalc : IDispatch{ [id(1), helpstring("method Add")] HRESULT Add([in] LONG Operand1, [in] LONG Operand2, [out,retval] LONG* Result); [propget, id(2), helpstring("property Operand1")] HRESULT Operand1([out, retval] LONG* pVal); [propput, id(2), helpstring("property Operand1")] HRESULT Operand1([in] LONG newVal); }; // Bibliothque de types : coclass Calc { [default] interface ICalc; [default, source] dispinterface _ICalcEvents; };

Notion de bibliothque de types


Reprsentation binaire de l'IDL Dcrit les classes et les interfaces Utilise pour le marshalling Utilise pour la description dynamique des objets :

langages de scripts, conteneurs gnriques.

Proxies et Stubs
Implments sous forme de composants in-process Chargs par le systme dans les processus serveurs et clients :

le proxy est polymorphique avec l'objet gr, le client communique avec le proxy, le stub est invisible dans le serveur.

Le proxy et le stub effectuent le transport

Marshalling COM
Processus 1 DLL Proxy/Stub Proxy IServer Client Type Library IServer Serveur Processus 2 DLL Proxy/Stub Stub

IDL

Conventions d'appel

Le marshalling implique :

un respect absolu des conventions d'appel, un allocateur mmoire ddi, des rgles de passage de paramtres. allous par l'appel, librs par l'appelant.

Les paramtres de sortie doivent tre :


L'appel ne doit pas modifier les paramtres d'entre

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Cration et identification
Les objets sont crs avec CoCreateInstance Leurs classes sont identifies par des CLSIDs Les interfaces sont identifies par des IIDs CLSIDs et IIDs sont des GUIDs

Globally Unique IDentifier , nombres 128 bits globalement uniques, gnrs avec uuidgen.exe (ou API).

Enregistrement des objets

Les serveurs sont enregistrs en base de registres :


association (CLSID, binaire), association (IID, Type Library), associations (noms humains, GUID).

Les serveurs in-process exportent des mthodes de cration d'objets Les serveurs excutables enregistrent leurs fabriques d'objets au dmarrage

Cration des objets

Client Client 1

DLL Objet Fabrique de classe

Serveur Objet

6 5

Fabrique de classe

7
Table des fabriques

4
Localisation

COM
CoCreateInstance

2 Base de registres

CLSID

Distributed COM

Les objets peuvent tre utiliss distance Le marshalling des interfaces est systmatique Il faut enregistrer le proxy ct client et serveur Les serveurs excutables sont dportables tels quels Les serveurs in-process ncessitent un processus hte (DLLHost) Les droits sont dfinis par DcomCnfg

Distributed COM
Les canaux de communication sont multiplexs Les protocoles UDP ou TCP sont utilisables Un mcanisme de ping permet de tracer les pertes de communication Il est quasi impossible de contrler les timeouts rseau

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Notifications COM
Notion de point de connexion :

abonnement du client sur le point de connexion, notification par callback sur une interface spcifique.

numration dynamique des points de connexion (IConnectionPointContainer) Le serveur maintient la liste des clients Pas de mcanisme de bote aux lettres (non fiable)

Notifications COM
1. Recherche IConnectionPointContainer 2. Abonnement Client Client Client
IConnectionPoint

Serveur Point de connexion Liste des clients Point de connexion

Interface 1 Interface 1 Interface 2 3. Notification


IConnectionPoint

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Automation et late binding

Fonctionnalit d'appel de mthodes dynamique :


la mthode est appele via son nom, les paramtres sont grs de manire gnrique, via l'interface IDispatch. un jeu rduit de types de donnes, des conventions d'appel plus contraignantes. union pouvant contenir tous les types Automation, discriminant identifiant le type de la valeur.

Ncessite :

Les valeurs sont passes via des VARIANTs :


L'interface IDispatch
Mthode de prcompilation GetIDsOfNames Mthode d'invocation Invoke Mthodes permettant de rcuprer les informations de types Peut tre duale :

drive de IDispatch, contient les mthodes natives pour optimisation.

L'interface IDispatch

IDispatch AddRef Release QueryInterface GetTypeInfoCount GetTypeInfo GetIDsOfNames Invoke

OLE

OLE dfinit un jeu d'interfaces ddies l'incrustation et la liaison de documents Ces interfaces assurent :

les fonctionnalits de sauvegarde, visualisation, dition, une intgration pousse et progressive entre les applications (selon les interfaces implmentes). documents OLE, contrles ActiveX...

Technologie complexe mais extensible :


Applications OLE
IOleInPlaceFrame IOleInPlace UIWindow

Conteneur OLE Document OLE Site IOleClientSite IOleInPlaceSite IOleControlSite IAdviseSink IDispatch

Objet OLE
IPersistStorage IOleObject IDataObject IViewObject2 IOleControl IOleInPlaceObject IOleInPlaceActive Object IDispatch IConnectionPoint Container

Plan

Les origines de COM Les principes de base


Composants et interfaces COM IDL et marshalling et IDL Cration et enregistrement Notifications et distribution Automation et OLE

Services complmentaires

Conclusion

Le choix stratgique DCOM

C'est une technologie puissante :


rutilisation de composants, dploiement rseau facile, bus objets rpartis quasi-complet. documents OLE, nouvelles fonctionnalits systme (Shell, DirectX), code Visual Basic omniprsent, technologie Internet (ASP, fondement de .Net).

Elle est omniprsente dans Windows :


Conclusion

COM est un vritable bus objets C'est une technologie puissante et extensible Son implmentation est binaire et indpendante du langage COM est essentiel pour les documents OLE La suite : Une technologie complexe et difficile matriser dans le dtail