Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Se una classe è destinata a essere disponibile per i client in qualsiasi momento, come la maggior parte delle applicazioni, di solito la registri tramite un programma di installazione e configurazione. Ciò significa inserire informazioni sull'applicazione nel Registro di sistema, incluse le modalità e la posizione in cui instanziare gli oggetti. Queste informazioni devono essere registrate per tutti i CLSID. Altre informazioni sono facoltative. Strumenti come Regsvr32 semplificano la scrittura di un programma di installazione che registra i server all'installazione.
Se non si fa affidamento sulle impostazioni predefinite di sistema, nel Registro di sistema sono presenti due chiavi importanti: CLSID e AppID. Tra le informazioni importanti contenute in queste chiavi vi è il modo in cui l'oggetto deve essere istanziato. Gli oggetti possono essere designati come in-process, out-of-process locale o out-of-process remoto.
Nella chiave AppID sono disponibili diversi valori che definiscono informazioni specifiche per l'applicazione. Tra questi sono RemoteServerName e ActivateAtStorage, entrambi i quali possono essere usati per consentire a un client di creare un oggetto, con il client che non ha alcuna conoscenza predefinita della posizione del server. Per altre informazioni sulla creazione di istanze remote, vedere Individuazione di un Oggetto Remoto e Funzioni Helper per la Creazione di Istanze.
Un server può anche essere installato come servizio o per l'esecuzione con un account utente specifico. Per altre informazioni, vedere Installazione come applicazione di servizio.
Un server oppure un oggetto ROT che non è un servizio o non è in esecuzione con un account utente specifico può essere definito un server "attivare come attivatore". Per questi server, il contesto di sicurezza e la stazione/desktop della finestra del client devono corrispondere a quello del server. Un client che tenta di connettersi a un server remoto viene considerato avere un NULL stazione/desktop della finestra, pertanto solo il contesto di sicurezza del server viene confrontato in questa istanza. Per altre informazioni sui SID, vedere Security in COM.) COM memorizza nella cache la stazione/desktop della finestra di un processo quando il processo si connette per la prima volta al servizio COM distribuito. Pertanto, i client e i server COM non devono modificare la loro stazione finestra o thread desktop del processo dopo aver chiamato CoInitialize o CoInitializeEx.
Quando una classe viene registrata come in-process, una chiamata a CoGetClassObject per creare il relativo oggetto classe viene passata automaticamente da COM alla funzione DllGetClassObject, che la classe deve implementare per assegnare all'oggetto chiamante un puntatore al relativo oggetto classe.
Le classi implementate nei file eseguibili possono specificare che COM deve eseguire il loro processo e attendere che questo registri l'interfaccia IClassFactory dell'oggetto classe tramite una chiamata alla funzione CoRegisterClassObject.
Argomenti correlati