Compartir a través de


Implementación del Administrador de categorías de componentes

A medida que crece el número de componentes disponibles, resulta cada vez más difícil administrar estos componentes. En términos de las interfaces que exponen, así como las tareas que realizan, muchos componentes ofrecen una funcionalidad similar.

A menudo es necesario enumerar los componentes que se pueden usar en un contexto determinado. Algunos ejemplos de esto son el cuadro de diálogo Insertar objeto usado en documentos compuestos OLE y el cuadro de diálogo Insertar control usado en controles OLE. Estos cuadros de diálogo enumeran todos los componentes que cumplen (o reclaman cumplir) los contratos de interfaz para documentos o controles compuestos. Estas categorías existentes (documento OLE, control OLE) no implican una firma de interfaz exacta. Los documentos OLE tienen que exponer un determinado conjunto de interfaces principales (por ejemplo, IOleObject o IPersistStorage), pero también pueden exponer interfaces adicionales como IOleLink.

En el pasado, los componentes se han etiquetado agregando un nombre legible ("Insertable", "Control", etc.) como subclave a la clave del Registro HKEY_CLASSES_ROOT\CLSID\{...} correspondiente al componente. Esto funciona bien para una definición central de categorías, pero corre riesgos de colisiones de nombres cuando muchas partes independientes definen nuevas categorías. Al igual que en otras áreas de COM, la solución para proporcionar un espacio de nombres extensible reside en el uso de identificadores únicos globales (GUID). En lugar de usar un nombre legible, se asigna un número único (CATID) a cada categoría.

Otra limitación con la categorización existente es que se limita a expresar las funcionalidades del propio componente. Muchos componentes requieren ciertas funcionalidades de los contenedores. Cuando este componente se inserta en un contenedor, la inserción puede producir un error o comportarse inesperadamente, aunque el componente cumpla los contratos implícitos en una de sus categorías. Para enumerar los componentes que se pueden usar correctamente en determinadas situaciones, se deben tener en cuenta las funcionalidades del componente y del contenedor.

Debido a estas consideraciones, se realizaron los siguientes cambios en la categorización existente:

  • Las categorías se indican mediante CATID que son identificadores únicos globales.
  • En la subclave Components de la clave del Registro deHKEY_CLASSES_ROOT\CLSID , se desarrollaron dos subclaves independientes, "Categorías implementadas" y "Categorías requeridas". Estas subclaves contienen las listas de CATID proporcionadas por el componente o que el contenedor del componente debe proporcionar.

Para facilitar la administración de las categorías de componentes, las categorías se enumeran en un lugar central del registro: HKEY_CLASSES_ROOT\Component Categories. Esta clave enumera las categorías instaladas con su CATID y con nombres localizados y legibles.

Para obtener más información, vea los temas siguientes: