Siamo all'ultima puntata della serie di post dedicata al mondo COM. Qui fornirò solo alcuni ragguagli riguardo a come le informazioni dei vari COM Component sono posti all'interno del registro di sistema.

Ecco i posto precedenti.

Componenti COM: Introduzione - parte 1 di 6
Componenti COM: Le interfacce - parte 2 di 6
Componenti COM: Interface Definition Language .....anche chiamato IDL - parte 3 di 6
Componenti COM: vTable e dintorni - parte 4 di 6
Componenti COM: Early Binding e Late Binding, gioie e dolori - parte 5 di 6

Registro di sistema

Per poter utilizzare i componenti COM contenuti all'interno di un COM Server occorre registrare quest'ultimo nel sistema operativo ospitante: in tal modo verranno creati alcune voci nel registro di sistema che servono per poterlo utilizzare correttamente.

Questo processo di registrazione può avvenire utilizzando un sistema di installazione, che si occupa di copiare e creare tutte le corrette voci di registro, oppure usando il l'utility regsvr32, se il COM Server è di tipo dll. Usualmente se è di tipo exe, basta richiede l'esecuzione di questo e uno degli effetti ottenuti è la sua completa autoregistrazione in modo automagico.

Per registrare un server COM, e i componenti COM ivi contenuti.

regsvr32 <nome dll>

Per deseguire l'operazione inversa.

regsvr32 <nome dll> /u

Vediamo ora in modo sommario come vengono create le relative voci nel registro di sistema.

Le informazioni sono tutte memorizzate sotto la chiave HKEY_CLASSES_ROOT (che viene usualmente abbreviato come HKCR). In particolare in HKEY_CLASSES_ROOT\CLSID ogni componente ha la sua sotto chiave.

Come visto CLSID è un GUID associato ad ogni classe: nel nostro caso vale 859E9833-D804-4EAD-962A-E8ED438BDA79. Tale è il valore del GUID che si può anche vedere dal relativo IDL (vedere post precedenti). Pertanto la seguente chiave conterrà tutti i valori che identificano il COM Component InfPressapochista,.

HKEY_CLASSES_ROOT\CLSID\859E9833-D804-4EAD-962A-E8ED438BDA79

Tra i valori proposti e presenti nella sottochiave ci sono il file che rappresenta il COM Server, il tipo, il ProgId, il LibId e altre informazioni utili.

Ogni classe (COM Component) contenuto all'interno di un COM Server avrà la relativa voce sotto HKCR\CLSID.

Quando si crea un COM component si genera anche un PROGId, che è indispensabile per il late binding: infatti sarà questa la stringa da utilizzarsi per tale tipo di accesso.Questo prende sempre il seguente valore.

[ProjectName].[ClassModuleName]

Quindi nel caso in esempio avremo il seguente valore.

ComServer.InfPressapochista

Occorre un punto di incontro tra il ProgId e il CLSID: questo è rappresentato da HKEY_CLASSES_ROOT, al cui interno trova posto una voce per ogni ProgID: contenuta in questa voce vi è indicato il relativo CLSID.

Quindi esisterà un chiave come quella nel seguito, e al cui interno in una ottochiave sarà indicato il relativo CLSID.

HKEY_CLASSES_ROOT\ComServer.InfPressapochista

Un'altra informazione memorizzata nel registro di sistema è quella che riguarda la TypeLib. Anche in questo caso un GUID identifica univocamente la TypeLib, e viene chiamato LibID: nel caso di questi post tale valore è FC2AF343-0C59-44BE-971B-DCDBC8D1D315 (vedere file IDL).

Similmente ai casi prima la relativa chiave si trova in HKEY_CLASSES_ROOT\TypeLib: pertanto esisterà una chiave nel seguente percorso.

HKEY_CLASSES_ROOT\TypeLib\FC2AF343-0C59-44BE-971B-DCDBC8D1D315

Tra le varie sottochiavi qui presenti ve ne è una che indica il file che contiene la Typelib, usualmente la dll stessa,

Similmente ai casi visti in HKEY_CLASSES_ROOT\Interfaces contiene le informazioni riguardanti le intefacce. Nel caso in esempio esisterà una voce come nel seguito

HKEY_CLASSES_ROOT\Interfaces\0D0D1CEC-5FBE-4326-9603-082D7593D0EC

Tra le varie sottochiavi ne è presente una chiamata TypeLib che, guarda caso, conietne la LibID.

Per ulimo occorre che segnali la presenza di HKEY_CLASSES_ROOT\AppId: utilizzando lo stesso trucco visto sopra esisterà una chiave ove sono memorizzati i dati del COM Server.

HKEY_CLASSES_ROOT\AppId\859E9833-D804-4EAD-962A-E8ED438BDA79

La GUID in questo caso prende il nome di AppID: usualmente viene prelevato dai CLSID. Anche in questo caso le varie sottochiavi indicano le caratteristiche dell'oggetto COM.

Questa "retrospettiva" su un sistema che oramai è al tramonto Vi abbia interessato e/o possa esserVi utile.