Implementazione di Gestione categorie di componenti
Man mano che aumenta il numero di componenti disponibili, diventa sempre più difficile gestire questi componenti. In termini di interfacce che espongono e le attività eseguite, molti componenti offrono funzionalità simili.
Spesso è necessario enumerare i componenti che possono essere usati in un determinato contesto. Ad esempio, la finestra di dialogo Inserisci oggetto utilizzata nei documenti composti OLE e nella finestra di dialogo Inserisci controllo utilizzata nei controlli OLE. Queste finestre di dialogo elencano tutti i componenti che soddisfano (o dichiarano di soddisfare) i contratti di interfaccia per documenti o controlli composti. Queste categorie esistenti (documento OLE, controllo OLE) non implicano una firma di interfaccia esatta. I documenti OLE devono esporre un determinato set di interfacce di base (ad esempio IOleObject o IPersist Archiviazione), ma possono anche esporre interfacce aggiuntive, ad esempio IOleLink.
In passato, i componenti sono stati contrassegnati aggiungendo un nome leggibile ("Insertable", "Control" e così via) come sottochiave alla chiave del Registro di sistema HKEY_CLASedizione StandardS_ROOT\CLSID\{...} corrispondente al componente. Questo funziona bene per una definizione centrale di categorie, ma rischi conflitti di nomi quando molte parti indipendenti definiscono nuove categorie. Come in altre aree di COM, la soluzione per fornire uno spazio dei nomi estendibile si trova nell'uso di identificatori univoci globali (GUID). Anziché usare un nome leggibile, a ogni categoria viene assegnato un numero univoco (CATID).
Un'altra limitazione con la categorizzazione esistente è che è limitata all'espressione delle funzionalità del componente stesso. Molti componenti richiedono determinate funzionalità dai contenitori. Quando tale componente viene inserito in un contenitore, l'inserimento può non riuscire o comportarsi in modo imprevisto, anche se il componente soddisfa i contratti impliciti in una delle relative categorie. Per enumerare i componenti che possono essere usati correttamente in determinate situazioni, è necessario considerare le funzionalità del componente e del contenitore.
A causa di queste considerazioni, sono state apportate le modifiche seguenti alla categorizzazione esistente:
- Le categorie sono indicate tramite CATID che sono identificatori univoci globali.
- Nella sottochiave Components della chiave del Registro di sistema HKEY_CLASedizione StandardS_ROOT\CLSID sono state sviluppate due sottochiavi separate, "Categorie implementate" e "Categorie obbligatorie". Queste sottochiavi contengono gli elenchi di CATID forniti dal componente o che il contenitore del componente deve fornire.
Per semplificare la gestione delle categorie di componenti, le categorie sono elencate in una posizione centrale nel Registro di sistema: HKEY_CLASedizione StandardS_ROOT\Categorie componenti. Questa chiave elenca le categorie installate con il relativo CATID e con nomi localizzati leggibili.
Per ulteriori informazioni, vedi gli argomenti seguenti:
- Categorizzazione in base alle funzionalità dei componenti
- Categorizzazione in base alle funzionalità del contenitore
- Gestione categorie componenti
- Classi e associazioni predefinite
- Definizione delle categorie di componenti
- Associazione di icone a una categoria