Il semble que les objets COM soient des objets d'utilisation générale 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 des informations. Est-ce cela que sont les objets COM?
Réponses
Trop de publicités?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 de savoir si le composant a été implémenté dans le programme du client ou ailleurs sur la machine (ou 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 neutre par rapport au langage en utilisant le Langage de Définition d'Interface (IDL). Par exemple, l'une des interfaces fondamentales dans 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 en COM, car chaque composant COM doit l'implémenter. Elle définit deux aspects importants de la machinerie COM :
QueryInterface
permet au code appelant d'obtenir une implémentation pour une interface connue. En COM, les interfaces sont référencées par des GUID (également connus sous le nom d'Identifiants 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. Cela agit comme une sorte d'opérateur de conversion, si vous voulez.AddRef()
etRelease()
implémentent 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, où une instance est détruite après que le dernier client ait libéré sa référence.
Tous les composants COM sont enregistrés dans le système lors de l'installation. Si un programmeur souhaite utiliser un certain composant, il doit :
- S'assurer 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 ensuite demander au système d'instancier le composant (en C, la fonction pour faire cela s'appelle
CoCreateInstance()
). Vous pouvez consulter le registre sousHKEY_CLASSES_ROOT\CLSID
: chaque GUID dedans est (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, implémenter ou utiliser des composants COM en C nécessite une quantité énorme de travail, mais des langages de plus haut niveau comme Visual Basic ont beaucoup simplifié l'implémentation et l'utilisation de composants COM. Les avantages sont cependant très réels. Cela permet d'écrire une application en, disons, Visual Basic, mais d'implémenter quand même les algorithmes critiques en termes de performances 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 marshalling des arguments d'appel de méthode, les passant à travers des threads, des processus et des connexions réseau au besoin, de sorte que le code client a l'impression d'utiliser un objet normal.
De nombreuses parties fondamentales de Windows sont basées sur COM. Explorer Windows (le gestionnaire de fichiers), par exemple, est essentiellement une coquille vide. Il définit un ensemble d'Interfaces COM pour naviguer et afficher des hiérarchies d'arborescence, et tout le code qui affiche réellement "Mon Ordinateur", 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.
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 un autre compilateur C++ du fournisseur ou (au final) une langue différente.
Si vous voulez une bonne introduction à COM, lisez Essential COM par Don Box.
Vous ne pourrez pas battre wikipedia à ce sujet.
Cela. :)