Windows NT/2000/XP Enjeux et contraintes techniques Cinquième 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 – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Component Object Model ● La technologie Microsoft porte plusieurs noms : – (D)COM(+) (Distributed Component Object Model), – OLE (Object Linking and Embedding), – ActiveX. ● Initialement prévue pour l'intégration et la liaison de documents ● Étendue pour constituer un véritable ORB – Visual Basic, – base de nombreuses technologies.
Plan ● Les origines de COM ● Les principes de base – Composants et interfaces COM – IDL et marshalling – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Les composants ● Extension de la notion d'objet : – indépendance du langage (VB, C++, scripts), – réutilisation de code. ● Implémentation possible dans des serveurs : – in-process (DLL), – exécutables (EXE). ● Transparence réseau
Interfaces COM ● Les fonctionnalités sont basées sur les interfaces ● Les interfaces exposent les fonctionnalités des objets ● Les interfaces COM sont définies au niveau binaire ● Implémentation indépendante du langage ● Mais nécessite des langages compatibles ● Spécifique à la plate-forme
Interfaces COM ● Pointeur de tableau de pointeurs de fonctions ● Dérivent toutes de l'interface IUnknown ● Implémentées nativement en C++ par des classes abstraites (structure de V-table) ● Implémentées en Visual Basic en natif ● Passerelles pour les objets.Net (quasi natif)
Notion de Vtable &Méthode1 &Méthode2 &Méthode3... &Méthoden VTable &VTable Interface Code et données privés de l'objet/proxy Méthode 1 Méthode 2 Méthode n
L'interface IUnknown ● IUnknown est la base de toutes les interfaces ● Permet la gestion de la durée de vie : – utilisation d'un compte de références, – méthodes AddRef() et Release(). ● Point d'entrée pour les autres fonctionnalités : – méthode QueryInterface pour obtenir une autre interface, – détermination dynamique des fonctionnalités.
L'interface IUnknown AddRef Release QueryInterface IUnknown
Plan ● Les origines de COM ● Les principes de base – Composants et interfaces COM – IDL et marshalling – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Langage IDL ● Le langage IDL de Microsoft permet : – de décrire les interfaces, – de décrire les classes de composants. ● Permet de générer : – les en-têtes C/C++, – une bibliothèque de types, – le code C du proxy et du stub.
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); }; // Bibliothèque de types : coclass Calc { [default] interface ICalc; [default, source] dispinterface _ICalcEvents; };
Notion de bibliothèque de types ● Représentation binaire de l'IDL ● Décrit les classes et les interfaces ● Utilisée pour le marshalling ● Utilisée pour la description dynamique des objets : – langages de scripts, – conteneurs génériques.
Proxies et Stubs ● Implémentés sous forme de composants in-process ● Chargés par le système dans les processus serveurs et clients : – le proxy est polymorphique avec l'objet géré, – 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 Client Proxy IServer DLL Proxy/Stub Processus 2 Serveur IServer Stub DLL Proxy/Stub IDL Type Library
Conventions d'appel ● Le marshalling implique : – un respect absolu des conventions d'appel, – un allocateur mémoire dédié, – des règles de passage de paramètres. ● Les paramètres de sortie doivent être : – alloués par l'appelé, – libérés par l'appelant. ● L'appelé ne doit pas modifier les paramètres d'entrée
Plan ● Les origines de COM ● Les principes de base – Composants et interfaces COM – IDL et marshalling – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Création et identification ● Les objets sont créés avec CoCreateInstance ● Leurs classes sont identifiées par des CLSIDs ● Les interfaces sont identifiées par des IIDs ● CLSIDs et IIDs sont des GUIDs – « Globally Unique IDentifier », – nombres 128 bits globalement uniques, – générés avec uuidgen.exe (ou API).
Enregistrement des objets ● Les serveurs sont enregistrés en base de registres : – association (CLSID, binaire), – association (IID, Type Library), – associations (noms humains, GUID). ● Les serveurs in-process exportent des méthodes de création d'objets ● Les serveurs exécutables enregistrent leurs fabriques d'objets au démarrage
Création des objets CO M Base de registres CLSID Localisation CoCreateInstance Table des fabriques Client DLL Fabrique de classe Objet Serveur Fabrique de classe Objet
Distributed COM ● Les objets peuvent être utilisés à distance ● Le marshalling des interfaces est systématique ● Il faut enregistrer le proxy côté client et serveur ● Les serveurs exécutables sont déportables tels quels ● Les serveurs in-process nécessitent un processus hôte (DLLHost) ● Les droits sont définis par DcomCnfg
Distributed COM ● Les canaux de communication sont multiplexés ● Les protocoles UDP ou TCP sont utilisables ● Un mécanisme de ping permet de tracer les pertes de communication ● Il est quasi impossible de contrôler les timeouts réseau
Plan ● Les origines de COM ● Les principes de base – Composants et interfaces COM – IDL et marshalling – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Notifications COM ● Notion de point de connexion : – abonnement du client sur le point de connexion, – notification par callback sur une interface spécifique. ● Énumération dynamique des points de connexion (IConnectionPointContainer) ● Le serveur maintient la liste des clients ● Pas de mécanisme de boîte aux lettres (non fiable)
Notifications COM Client Interface 2 Point de connexion IConnectionPoint Liste des clients Point de connexion IConnectionPoint Serveur 3. Notification Client Interface 1 Client Interface 1 1. Recherche 2. Abonnement IConnectionPointContainer
Plan ● Les origines de COM ● Les principes de base – Composants et interfaces COM – IDL et marshalling – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Automation et late binding ● Fonctionnalité d'appel de méthodes dynamique : – la méthode est appelée via son nom, – les paramètres sont gérés de manière générique, – via l'interface IDispatch. ● Nécessite : – un jeu réduit de types de données, – des conventions d'appel plus contraignantes. ● Les valeurs sont passées via des VARIANTs : – union pouvant contenir tous les types Automation, – discriminant identifiant le type de la valeur.
L'interface IDispatch ● Méthode de précompilation « GetIDsOfNames » ● Méthode d'invocation « Invoke » ● Méthodes permettant de récupérer les informations de types ● Peut être « duale » : – dérive de IDispatch, – contient les méthodes natives pour optimisation.
L'interface IDispatch AddRef Release QueryInterface GetTypeInfoCount GetTypeInfo GetIDsOfNames Invoke IDispatch
OLE ● OLE définit un jeu d'interfaces dédiées à l'incrustation et à la liaison de documents ● Ces interfaces assurent : – les fonctionnalités de sauvegarde, visualisation, édition, – une intégration poussée et progressive entre les applications (selon les interfaces implémentées). ● Technologie complexe mais extensible : – documents OLE, – contrôles ActiveX...
Applications OLE Objet OLE IViewObject2 IPersistStorage IOleObject IDataObject IOleControl IOleInPlaceObject IOleInPlaceActive Object IDispatch IConnectionPoint Container Conteneur OLE IOleInPlaceFrame Document OLE Site IOleClientSite IOleInPlaceSite IOleControlSite IAdviseSink IDispatch IOleInPlace UIWindow
Plan ● Les origines de COM ● Les principes de base – Composants et interfaces COM – IDL et marshalling et IDL – Création et enregistrement ● Services complémentaires – Notifications et distribution – Automation et OLE ● Conclusion
Le choix stratégique DCOM ● C'est une technologie puissante : – réutilisation de composants, – déploiement réseau facile, – bus à objets répartis quasi-complet. ● Elle est omniprésente dans Windows : – documents OLE, – nouvelles fonctionnalités système (Shell, DirectX), – code Visual Basic omniprésent, – technologie Internet (ASP, fondement de.Net).
Conclusion ● COM est un véritable bus à objets ● C'est une technologie puissante et extensible ● Son implémentation est binaire et indépendante du langage ● COM est essentiel pour les documents OLE ● La suite : Une technologie complexe et difficile à maîtriser dans le détail