Delen via


Implementatie van Component Categories Manager

Naarmate het aantal beschikbare onderdelen groeit, wordt het steeds moeilijker om deze onderdelen te beheren. Wat betreft de interfaces die ze beschikbaar maken en de taken die ze uitvoeren, bieden veel onderdelen vergelijkbare functionaliteit.

Het is vaak nodig om de onderdelen op te sommen die in een bepaalde context kunnen worden gebruikt. Voorbeelden hiervan zijn het dialoogvenster Object invoegen dat wordt gebruikt in OLE-samengestelde documenten en het dialoogvenster Besturingselement invoegen dat wordt gebruikt in OLE-besturingselementen. Deze dialoogvensters bevatten alle onderdelen die voldoen (of claimen om te voldoen) aan de interfacecontracten voor samengestelde documenten of besturingselementen. Deze bestaande categorieën (OLE-document, OLE-besturingselement) impliceren geen exacte interfacehandtekening. OLE-documenten moeten een bepaalde set kerninterfaces beschikbaar maken (bijvoorbeeld IOleObject of IPersistStorage), maar kunnen ook extra interfaces beschikbaar maken, zoals IOleLink-.

In het verleden zijn onderdelen gelabeld door een door mensen leesbare naam ('Insertable', 'Control' enzovoort) toe te voegen als subsleutel aan de HKEY_CLASSES_ROOT\CLSID\{...} registersleutel die overeenkomt met het onderdeel. Dit werkt goed voor een centrale definitie van categorieën, maar risico's voor naamconflicten wanneer veel onafhankelijke partijen nieuwe categorieën definiëren. Net als in andere gebieden van COM, ligt de oplossing voor het bieden van een uitbreidbare naamruimte in het gebruik van GUID's (Globally Unique Identifiers). In plaats van een door mensen leesbare naam te gebruiken, wordt aan elke categorie een uniek nummer (CATID) toegewezen.

Een andere beperking met de bestaande categorisatie is dat het beperkt is tot het uitdrukken van de mogelijkheden van het onderdeel zelf. Voor veel onderdelen zijn bepaalde mogelijkheden van de containers vereist. Wanneer een dergelijk onderdeel in een container wordt ingevoegd, kan de invoeging mislukken of onverwacht werken, ook al voldoet het onderdeel aan de contracten die worden geïmpliceerd door een van de categorieën. Als u de onderdelen wilt inventariseren die in bepaalde situaties met succes kunnen worden gebruikt, moeten de mogelijkheden van zowel het onderdeel als de container worden overwogen.

Vanwege deze overwegingen zijn de volgende wijzigingen aangebracht in de bestaande categorisatie:

  • Categorieën worden aangegeven met behulp van CATID's die wereldwijd unieke id's zijn.
  • Onder de Components subsleutel van de registersleutel HKEY_CLASSES_ROOT\CLSID zijn twee afzonderlijke subsleutels, Geïmplementeerde categorieën en Vereiste categorieën, ontwikkeld. Deze subsleutels bevatten de lijsten met CATID's die worden geleverd door het onderdeel of die de container van het onderdeel moet opgeven.

Om het beheer van de onderdeelcategorieën te vereenvoudigen, worden categorieën vermeld op een centrale plaats in het register: HKEY_CLASSES_ROOT\Component Categories. Deze sleutel bevat de geïnstalleerde categorieën, zowel met hun CATID als met gelokaliseerde, door mensen leesbare namen.

Zie de volgende onderwerpen voor meer informatie: