Udostępnij przez


Implementacja menedżera kategorii składników

Wraz ze wzrostem liczby dostępnych składników coraz trudniej jest zarządzać tymi składnikami. Jeśli chodzi o interfejsy, które uwidaczniają, a także zadania, które wykonują, wiele składników oferuje podobne funkcje.

Często konieczne jest wyliczenie składników, które mogą być używane w określonym kontekście. Przykłady tego są wstaw obiekt okno dialogowe używane w dokumentach złożonych OLE i okno dialogowe Wstawianie kontrolki używane w kontrolkach OLE. Te okna dialogowe zawierają listę wszystkich składników, które spełniają (lub oświadczenia do spełnienia) kontrakty interfejsu dla złożonych dokumentów lub kontrolek. Te istniejące kategorie (dokument OLE, kontrolka OLE) nie oznaczają dokładnego podpisu interfejsu. Dokumenty OLE muszą uwidocznić określony zestaw podstawowych interfejsów (na przykład IOleObject lub IPersistStorage), ale mogą również uwidocznić dodatkowe interfejsy, takie jak IOleLink.

W przeszłości składniki zostały oznaczone przez dodanie nazwy czytelnej dla człowieka ("Wstawialne", "Kontrolka" itd.) jako podklucza do klucza rejestru HKEY_CLASSES_ROOT\CLSID\{...} odpowiadającego składnikowi. Działa to dobrze w przypadku centralnej definicji kategorii, ale ryzyko kolizji nazw, gdy wiele niezależnych stron definiuje nowe kategorie. Podobnie jak w innych obszarach modelu COM, rozwiązaniem do zapewnienia rozszerzalnej przestrzeni nazw jest użycie globalnie unikatowych identyfikatorów (GUID). Zamiast używać nazwy czytelnej dla człowieka, do każdej kategorii jest przypisywana unikatowa liczba (CATID).

Innym ograniczeniem w przypadku istniejącej kategoryzacji jest ograniczenie do wyrażania możliwości samego składnika. Wiele składników wymaga pewnych możliwości z kontenerów. Gdy taki składnik zostanie wstawiony do kontenera, wstawienie może zakończyć się niepowodzeniem lub zachowywać się nieoczekiwanie, mimo że składnik spełnia kontrakty sugerowane przez jedną z jego kategorii. Aby wyliczyć składniki, które mogą być pomyślnie używane w pewnych sytuacjach, należy wziąć pod uwagę możliwości zarówno składnika, jak i kontenera.

Ze względu na te zagadnienia wprowadzono następujące zmiany w istniejącej kategoryzacji:

  • Kategorie są wskazywane przy użyciu identyfikatorów CATID, które są globalnie unikatowymi identyfikatorami.
  • W ramach podklucza Components klucza rejestru HKEY_CLASSES_ROOT\CLSID zostały opracowane dwa oddzielne podklucze", "Zaimplementowane kategorie" i "Wymagane kategorie". Te podklucze zawierają listy identyfikatorów CATID dostarczanych przez składnik lub że kontener składnika musi podać.

Aby ułatwić zarządzanie kategoriami składników, kategorie są wyświetlane w centralnym miejscu w rejestrze: HKEY_CLASSES_ROOT\Component Categories. Ten klucz zawiera listę zainstalowanych kategorii zarówno z ich identyfikatorem CATID, jak i zlokalizowanymi nazwami czytelnymi dla człowieka.

Aby uzyskać więcej informacji, zobacz następujące tematy: