Qu'est-ce que COM ? - Pourquoi la conception de COM sous Windows est encore magnifique
· Mis à jour le: · Go Komura · COM, ActiveX, Développement Windows
Qu’est-ce que COM ?
COM (Component Object Model) est un « contrat binaire » qui permet aux composants de communiquer entre eux sous Windows. C’est un mécanisme de communication fondé sur des interfaces agissant comme des contrats stricts, au-delà des différences de langages et de compilateurs, et qui repose fondamentalement sur la philosophie de conception « programmer pour le contrat, et non pour l’implémentation ».
Les trois éléments clés de COM
1. Une conception centrée sur l’interface
Dans COM, « le contrat prime sur l’implémentation ». Vous pouvez utiliser un objet sans rien connaître de son implémentation interne, du moment que vous connaissez ses interfaces publiées.
2. L’identification par GUID (CLSID / IID)
Chaque composant et chaque interface se voit attribuer un identifiant unique au monde (GUID), si bien que les collisions de noms ne peuvent tout simplement pas se produire.
3. IUnknown
L’interface de base dont héritent toutes les interfaces COM. Elle fournit les trois fonctions suivantes.
| Méthode | Rôle |
|---|---|
QueryInterface |
Demander si l’objet possède une autre interface |
AddRef |
Augmenter le compteur de références |
Release |
Diminuer le compteur de références (l’objet se détruit lui-même lorsqu’il atteint 0) |
Les quatre forces de COM
1. La compatibilité binaire
Une fois compilé, un composant peut être réutilisé quel que soit le langage de programmation ou le runtime. Il est ainsi tout à fait courant d’appeler depuis C# ou Python un composant COM écrit en C++.
2. La séparation des interfaces
L’implémentation étant entièrement masquée et seul le contrat étant publié, l’implémentation interne peut être modifiée librement sans affecter les appelants.
3. La coexistence des versions
Pour ajouter des fonctionnalités tout en préservant la compatibilité ascendante, la conception de base consiste à ajouter de nouvelles interfaces. De nouvelles fonctionnalités peuvent ainsi être proposées sans modifier les anciennes interfaces.
4. La réutilisation au-delà des frontières de processus
Avec le COM hors processus (Out-of-proc COM, serveurs EXE), vous pouvez appeler en toute sécurité des fonctionnalités situées dans un autre processus. Notez toutefois que si le processus serveur plante, l’appelant reçoit des échecs tels que RPC_E_DISCONNECTED ou RPC_S_SERVER_UNAVAILABLE, ce qui nécessite malgré tout une logique de récupération pour redémarrer et se reconnecter.
COM est toujours d’actualité
On a souvent tendance à la considérer comme une « vieille technologie », mais COM est un mécanisme qui reste utilisé aujourd’hui au cœur même de Windows.
Où COM est utilisé
- Extensions de l’Explorateur (menus contextuels, aperçus)
- Automatisation Office (contrôle externe d’Excel et de Word)
- Interopérabilité avec .NET (COM Interop)
- Systèmes existants incluant ActiveX
- DirectX, l’API Windows Shell et de nombreuses autres API Windows
Même si vous pensez que « cela ne me concerne pas », tant que vous développez pour Windows, COM apparaît quelque part.
Conclusion
Je pense que la beauté de COM réside dans son « indépendance vis-à-vis du langage, du processus et de l’implémentation ». Une conception d’interface neutre vis-à-vis du langage, une identification unique et une gestion des versions grâce aux GUID, un comptage de références via IUnknown, et un mécanisme qui gère la communication inter-processus de façon transparente. Autant d’idées universelles qui s’appliquent directement au développement orienté composants moderne (les contrats des API REST, la séparation des interfaces dans les microservices, etc.).
Articles associés
Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.
Externalisation et développement sur mesure d'une application Windows : ce qu'il faut clarifier avant de se lancer
Avant de confier l'externalisation ou le développement sur mesure d'une application Windows, voici les points à clarifier : révision d'un...
L'étrange amour d'un développeur, ou : comment j'ai appris à ne plus m'en faire et à aimer Windows
Windows est contraignant. Mais cette contrainte est aussi celle d'un système d'exploitation qui porte depuis des décennies le poids d'act...
Pièges d'enregistrement et de bitness dans le développement COM/OCX/ActiveX
COM, OCX et ActiveX : nous passons en revue, d'un point de vue pratique, les pièges liés au 32 bits/64 bits, à Visual Studio 2022, à regs...
Qu'est-ce que COM / ActiveX / OCX ? - Différences et relations expliquées ensemble
Un guide pratique sur ce qu'est COM, ce qu'est ActiveX et ce qu'est OCX - leurs différences et relations, le lien avec OLE, où on les ren...
Comment traiter ActiveX / OCX aujourd'hui - Tableau de décision conserver / envelopper / remplacer
Lorsque vous rencontrez ActiveX / OCX, comment choisir entre conserver, envelopper et remplacer, en couvrant le 32 bits / 64 bits, l'enre...
Sujets associés
Ces pages replacent le sujet dans un contexte plus large de services et de décisions.
Thèmes techniques Windows
Portail des sujets sur le développement Windows, l'analyse des incidents et la valorisation des actifs existants.
Migration ActiveX
Choisir de conserver, encapsuler ou remplacer des composants COM / ActiveX / OCX.
Services liés à ce sujet
Cet article est directement lié aux services suivants.
Réutilisation et migration d'actifs existants
Comprendre la conception et la compatibilité de COM constitue un point d'entrée naturel pour réfléchir à la manière de tirer parti des ressources Windows existantes.
Conseil technique et revue de conception
Si vous souhaitez clarifier votre orientation en tenant compte d'IUnknown, des GUID et de la conception des frontières, cela peut naturellement déboucher sur du conseil technique et une revue de conception.
Questions fréquentes
Questions souvent posées lors d’une consultation sur le sujet de cet article.
- Qu'est-ce que COM ?
- COM (Component Object Model) est un « contrat binaire » qui permet aux composants de communiquer entre eux sous Windows. C'est un mécanisme qui, au-delà des différences de langages et de compilateurs, communique au moyen d'interfaces agissant comme des contrats stricts. Il repose sur la philosophie de conception consistant à « programmer pour le contrat, et non pour l'implémentation ».
- Qu'est-ce qu'IUnknown ?
- IUnknown est l'interface de base dont héritent toutes les interfaces COM. Elle fournit trois fonctions : QueryInterface, qui demande si l'objet possède une autre interface ; AddRef, qui augmente le compteur de références ; et Release, qui diminue le compteur de références et détruit l'objet lorsque celui-ci atteint zéro. La gestion de la durée de vie des objets COM repose entièrement sur ce comptage de références.
- COM est-il encore utilisé aujourd'hui ?
- Oui, COM est un mécanisme qui reste utilisé aujourd'hui au cœur même de Windows. On le retrouve dans les extensions de l'Explorateur (menus contextuels, aperçus), l'automatisation Office d'Excel et de Word, l'interopérabilité avec .NET (COM Interop), les systèmes existants incluant ActiveX, ainsi que dans de nombreuses API Windows comme DirectX ou l'API Windows Shell. Tant que vous développez pour Windows, COM apparaît quelque part.
- Quels sont les points forts de COM ?
- Il y en a principalement quatre. La compatibilité binaire, qui permet de réutiliser un composant une fois compilé, quel que soit le langage ou le runtime ; la séparation des interfaces, qui masque l'implémentation et ne publie que le contrat ; la coexistence des versions, qui préserve la compatibilité ascendante en ajoutant de nouvelles interfaces ; et enfin, l'appel sécurisé de fonctionnalités d'un autre processus grâce au COM hors processus (Out-of-proc COM, serveur EXE).
Profil de l’auteur
Page de présentation de l’auteur de l’article.
Go Komura
Représentant de KomuraSoft LLC
Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.
Liens publics