Bibliothèque COM

Tout processus qui utilise COM doit initialiser et non initialiser la bibliothèque COM. En plus d’être une spécification, COM implémente également certains services importants dans cette bibliothèque. Fournie sous la forme d’un ensemble de DLL et d’EXE (principalement Ole32.dll et Rpcss.exe) dans Microsoft Windows, la bibliothèque COM comprend les éléments suivants :

  • Un petit nombre de fonctions fondamentales qui facilitent la création d’applications COM, à la fois client et serveur. Pour les clients, COM fournit des fonctions de base pour la création d’objets. Pour les serveurs, COM fournit les moyens d’exposer leurs objets.

  • Services de localisateur d’implémentation par le biais desquels COM détermine, à partir d’un identificateur de classe unique (CLSID), quel serveur implémente cette classe et où se trouve ce serveur. Ce service inclut la prise en charge d’un niveau d’indirection, généralement un registre système, entre l’identité d’une classe d’objet et l’empaquetage de l’implémentation afin que les clients soient indépendants de l’empaquetage, ce qui peut changer à l’avenir.

  • La procédure distante transparente appelle lorsqu’un objet s’exécute sur un serveur local ou distant.

  • Mécanisme standard permettant à une application de contrôler la façon dont la mémoire est allouée au sein de son processus, en particulier la mémoire qui doit être transmise entre les objets coopérants afin qu’elle puisse être libérée correctement.

Pour utiliser les services COM de base, tous les threads COM d’exécution dans les clients et les serveurs hors processus doivent appeler la fonction CoInitialize ou CoInitializeEx avant d’appeler toute autre fonction COM à l’exception des appels d’allocation de mémoire. CoInitializeEx remplace l’autre fonction, en ajoutant un paramètre qui vous permet de spécifier le modèle de thread du thread : apartment-threaded ou free-threaded. Un appel à CoInitialize définit simplement le modèle de threading sur apartment-threaded.

Les applications de documents composés OLE appellent la fonction OleInitialize , qui appelle CoInitializeEx et effectue également une initialisation requise pour les documents composés. Par conséquent, les threads qui appellent OleInitialize ne peuvent pas être libres. Pour plus d’informations sur le threading dans les clients et les serveurs, consultez Processus, Threads et Appartements.

Les serveurs in-process n’appellent pas les fonctions d’initialisation, car elles sont chargées dans un processus qui l’a déjà fait. Par conséquent, les serveurs in-process doivent définir leur modèle de thread dans le Registre sous la clé InprocServer32 . Pour plus d’informations sur les problèmes de thread dans les serveurs in-process, consultez Problèmes de thread de serveur in-process.

Il est également important de ne pas initialiser la bibliothèque. Pour chaque appel à CoInitialize ou CoInitializeEx, il doit y avoir un appel correspondant à CoUninitialize. Pour chaque appel à OleInitialize, il doit y avoir un appel correspondant à OleUninitialize.

Les serveurs in-process peuvent supposer que le processus dans lequel ils sont chargés a déjà effectué ces étapes.

COM (Component Object Model)