Qu’est-ce que COM (Component Object Model) en un mot?

Il semble que les objects COM soient des objects d’usage général qui sont régis par le système d’exploitation. Les objects suivent une interface ssortingcte et vous permettent d’interroger les objects pour déterminer des informations. Est-ce ce que sont les objects COM?

COM est un mécanisme qui permet la réutilisation d’objects (ou plutôt de composants), indépendamment des langages utilisés par le programmeur qui a implémenté le composant et le programmeur qui l’utilise, indépendamment du fait que le composant ait été implémenté dans le programme du client ou ailleurs sur la machine (ou le réseau).

D’une manière générale, chaque composant COM fournit une implémentation d’une ou plusieurs interfaces. Ces interfaces sont définies de manière indépendante du langage à l’aide du langage IDL (Interface Definition Language) . A titre d’exemple, l’une des interfaces fondamentales de COM, IUnknown , est définie comme suit:

interface IUnknown { virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0; virtual ULONG AddRef(void) = 0; virtual ULONG Release(void) = 0; }; 

Cette petite interface est fondamentale dans COM, car chaque composant COM doit l’ implémenter. Il définit deux aspects importants des machines COM:

  • QueryInterface permet au code d’appel d’obtenir une implémentation pour une interface connue. Dans COM, les interfaces sont référencées par des GUID (également appelés identificateurs d’interface, IID). Si un object implémente plusieurs interfaces, c’est ainsi que le code client obtient une référence à chacune de ces interfaces. Il agit comme une sorte d’opérateur de casting, si vous voulez.
  • AddRef() et Release() implémentent le mécanisme de gestion de la mémoire pour les objects COM. Comme leur nom l’indique, le modèle le plus courant est le mécanisme de comptage de référence, dans lequel une instance est détruite après que le dernier client a publié sa référence.

Tous les composants COM sont enregistrés avec le système lors de l’installation. Si un programmeur veut utiliser un certain composant, il doit:

  • Assurez-vous que le composant est installé à un emplacement accessible. La plupart du temps, il se trouve sur le système de l’application en cours d’exécution, mais COM + permet également aux composants d’exister sur des ordinateurs distants.
  • Connaître le GUID du composant donné. Avec ce GUID, le client peut alors demander au système d’instancier le composant (en C, la fonction est appelée CoCreateInstance() ). Vous pouvez regarder dans le registre sous HKEY_CLASSES_ROOT\CLSID : chaque GUID dans lequel il y a (très probablement) un identifiant pour un composant ou une interface COM, et les entrées sous cette clé indiquent au système comment il doit être instancié.

La machine COM est extrêmement complexe. Par exemple, l’implémentation ou l’utilisation de composants COM dans C nécessite une quantité de travail épouvantable, mais les langages de niveau supérieur tels que Visual Basic ont beaucoup consortingbué à faciliter l’implémentation et l’utilisation des composants COM. Les avantages sont cependant très réels. Cela permet d’écrire une application dans Visual Basic, par exemple, mais de toujours implémenter les algorithmes critiques en C ou C ++ en tant qu’objects COM, qui peuvent être utilisés directement à partir du code VB. Le système prend en charge le regroupement des arguments d’appel de méthode, en les transmettant à travers les threads, les processus et les connexions réseau selon les besoins afin que le code client ait l’impression d’utiliser un object normal.

De nombreuses parties fondamentales de Windows sont basées sur COM. Windows Explorer (le gestionnaire de fichiers), par exemple, est fondamentalement un shell vide. Il définit un groupe d’interfaces COM pour la navigation et l’affichage des hiérarchies d’arborescence et tout le code qui affiche réellement “Poste de travail”, les lecteurs, les dossiers et les fichiers est un ensemble de composants COM qui implémentent ces interfaces.

Avec l’avènement de .NET, COM devient peu à peu obsolète.

COM est un mécanisme qui a été développé pour permettre aux utilisateurs de dissortingbuer des binarys qui pourraient être réutilisés même si l’appelant utilisait le compilateur C ++ d’un autre fournisseur ou, au final, un langage différent.

Si vous voulez une bonne introduction à COM, lisez Essential COM par Don Box .