Qu'est-ce que COM (Component Object Model) en un mot? [fermé]

89

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


la source

Réponses:

111

COM est un mécanisme qui permet la réutilisation d'objets (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, et indépendamment du fait que le composant a été implémenté dans le programme du client ou ailleurs sur la machine (ou sur le réseau).

De 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 de définition d'interface (IDL) . À titre d'exemple, l'une des interfaces fondamentales de COM, IUnknown , est définie comme ceci:

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 de la machine COM:

  • QueryInterfacepermet 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 objet 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émentez le mécanisme de gestion de la mémoire pour les objets COM. Comme leur nom l'indique, le modèle le plus courant est le mécanisme de comptage de références, 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 souhaite 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 pour cela est appelée CoCreateInstance()). Vous pouvez regarder dans le registre sous HKEY_CLASSES_ROOT\CLSID: chaque GUID contient (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 machinerie COM est extrêmement complexe. Par exemple, l'implémentation ou l'utilisation de composants COM en C nécessite une quantité de travail épouvantable, mais les langages de niveau supérieur comme Visual Basic ont beaucoup fait pour faciliter l'implémentation et l'utilisation des composants COM. Les bénéfices sont cependant bien réels. Il permet d'écrire une application dans, par exemple, Visual Basic, mais de toujours implémenter les algorithmes critiques en C ou C ++ en tant qu'objets COM, qui peuvent être utilisés directement à partir du code VB. Le système se charge de rassembler les arguments d'appel de méthode, en les passant à travers les threads, les processus et les connexions réseau selon les besoins afin que le code client ait l'impression d'utiliser un objet normal.

De nombreuses parties fondamentales de Windows sont basées sur COM. L'Explorateur Windows (le gestionnaire de fichiers), par exemple, est essentiellement un shell vide. Il définit un ensemble 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 lentement obsolète.

Carl Seleborg
la source
10
Source pour la dernière ligne?
Shad
32

COM est un mécanisme qui a été développé pour permettre aux gens de distribuer des binaires qui pourraient être réutilisés même si l'appelant utilisait le compilateur C ++ d'un autre fournisseur ou (finalement) un langage complètement différent.

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

McDowell
la source