Implémentation du Gestionnaire de catégories de composants

À mesure que le nombre de composants disponibles augmente, il devient de plus en plus difficile de gérer ces composants. En ce qui concerne les interfaces qu’ils exposent ainsi que les tâches qu’ils effectuent, de nombreux composants offrent des fonctionnalités similaires.

Il est souvent nécessaire d’énumérer les composants qui peuvent être utilisés dans un contexte donné. Par exemple, la boîte de dialogue Insérer un objet utilisée dans les documents composés OLE et la boîte de dialogue Insérer un contrôle utilisée dans les contrôles OLE. Ces boîtes de dialogue répertorient tous les composants qui remplissent (ou prétendent remplir) les contrats d’interface pour les documents ou contrôles composés. Ces catégories existantes (document OLE, contrôle OLE) n’impliquent pas une signature d’interface exacte. Les documents OLE doivent exposer un certain ensemble d’interfaces principales (par exemple, IOleObject ou IPersistStorage), mais peuvent également exposer des interfaces supplémentaires telles que IOleLink.

Dans le passé, les composants ont été étiquetés en ajoutant un nom lisible par l’utilisateur (« Insertable », « Control », etc.) en tant que sous-clé à la clé de RegistreHKEY_CLASSES_ROOT\CLSID\{...} correspondant au composant. Cela fonctionne bien pour une définition centrale des catégories, mais risque de nommer des collisions lorsque de nombreuses parties indépendantes définissent de nouvelles catégories. Comme dans d’autres domaines de COM, la solution pour fournir un espace de noms extensible réside dans l’utilisation d’identificateurs globaux uniques (GUID). Au lieu d’utiliser un nom lisible par l’homme, un numéro unique (CATID) est attribué à chaque catégorie.

Une autre limitation de la catégorisation existante est qu’elle est limitée à l’expression des fonctionnalités du composant lui-même. De nombreux composants nécessitent certaines fonctionnalités des conteneurs. Lorsqu’un tel composant est inséré dans un conteneur, l’insertion peut échouer ou se comporter de manière inattendue, même si le composant remplit les contrats impliqués par l’une de ses catégories. Pour énumérer les composants qui peuvent être utilisés avec succès dans certaines situations, les fonctionnalités du composant et du conteneur doivent être prises en compte.

En raison de ces considérations, les modifications suivantes ont été apportées à la catégorisation existante :

  • Les catégories sont indiquées à l’aide de CATID qui sont des identificateurs globaux uniques.
  • Sous la sous-clé Composants de la clé de Registre HKEY_CLASSES_ROOT\CLSID , deux sous-clés distinctes, « Catégories implémentées » et « Catégories requises », ont été développées. Ces sous-clés contiennent les listes de CATID fournies par le composant ou que le conteneur du composant doit fournir.

Pour faciliter la gestion des catégories de composants, les catégories sont répertoriées dans un emplacement central dans le Registre : HKEY_CLASSES_ROOT\Component Categories. Cette clé répertorie les catégories installées avec leur CATID et avec des noms localisés et lisibles par l’utilisateur.

Pour plus d'informations, voir les rubriques suivantes :