Implementace správce kategorií komponent

S rostoucím počtem dostupných komponent je stále obtížnější tyto komponenty spravovat. Z hlediska rozhraní, která zpřístupňují, a úloh, které provádějí, nabízí mnoho komponent podobné funkce.

Často je nutné vytvořit výčet součástí, které lze použít v určitém kontextu. Příklady jsou dialogové okno Vložit objekt použité ve složených dokumentech OLE a dialogové okno Vložit ovládací prvek použité v ovládacích prvcích OLE. Tato dialogová okna uvádějí všechny součásti, které splňují (nebo deklarují splnění) kontraktů rozhraní pro složené dokumenty nebo ovládací prvky. Tyto existující kategorie (dokument OLE, ovládací prvek OLE) neznamená přesný podpis rozhraní. Dokumenty OLE musí vystavit určitou sadu základních rozhraní (například IOleObject nebo IPersistStorage), ale mohou také vystavit další rozhraní, jako je IOleLink.

V minulosti byly komponenty označené přidáním názvu čitelného člověka (Insertable, Control atd.) jako podklíč k klíči registru HKEY_CLASSES_ROOT\CLSID\{...} odpovídající komponentě. To funguje dobře pro centrální definici kategorií, ale rizika kolize názvů, když mnoho nezávislých stran definuje nové kategorie. Stejně jako v jiných oblastech modelu COM spočívá řešení, které poskytuje rozšiřitelný obor názvů, použití globálně jedinečných identifikátorů (GUID). Místo použití názvu, který je čitelný člověkem, se každému kategorii přiřadí jedinečné číslo (CATID).

Dalším omezením existující kategorizace je, že se omezuje na vyjádření schopností samotné komponenty. Mnoho komponent vyžaduje z kontejnerů určité funkce. Pokud je taková komponenta vložena do kontejneru, může vložení selhat nebo se neočekávaně chovat, i když komponenta splňuje kontrakty vyplývající z jedné z jeho kategorií. Chcete-li vytvořit výčet komponent, které lze úspěšně použít v určitých situacích, je nutné zvážit možnosti komponenty i kontejneru.

Z těchto důvodů byly provedeny následující změny stávající kategorizace:

  • Kategorie jsou označeny pomocí identifikátorů CATID, které jsou globálně jedinečné identifikátory.
  • V části Components podklíč klíče registru HKEY_CLASSES_ROOT\CLSID byly vyvinuty dva samostatné podklíče, Implementované kategorie a Požadované kategorie. Tyto podklíče obsahují seznamy identifikátorů CATID poskytovaných komponentou nebo kontejnerem komponenty, které musí poskytnout.

Pro usnadnění správy kategorií součástí jsou kategorie uvedeny na centrálním místě v registru: HKEY_CLASSES_ROOT\Component Categories. Tento klíč uvádí nainstalované kategorie jak s jejich CATID, tak s lokalizovanými, čitelnými názvy lidí.

Další informace najdete v následujících tématech: