Condividi tramite


Creazione di oggetti COM Registration-Free

I contesti di attivazione consentono l'uso degli oggetti COM senza richiedere la registrazione. Ciò consente all'applicazione di avere più componenti con funzionalità diverse in base alla versione anziché alle informazioni del Registro di sistema. Più componenti possono esporre lo stesso oggetto COM con lo stesso GUID, ma hanno funzionalità diverse in base alla versione.

Quando un'applicazione richiede un GUID da CLSIDFromProgID, COM cerca prima di tutto il mapping da progid a CLSID nel contesto di attivazione attiva. Quando un'applicazione usa CoCreateInstance per ottenere un puntatore dell'interfaccia dell'istanza, COM cerca nel contesto di attivazione attiva per trovare quale DLL ospiterà CLSID. Se il contesto di attivazione non contiene le informazioni necessarie, COM cerca le informazioni nel Registro di sistema usando il metodo consueto.

Si noti che poiché i contesti di attivazione sono per thread, COM esegue il marshalling del contesto di attivazione del thread di creazione nel thread host e lo attiva prima di chiamare LoadLibrary o DllGetClassObject nel thread host. Questa funzionalità è già presente in Windows, il codice client non è necessario eseguire alcuna operazione per implementare questa funzionalità.

Le classi COM possono essere esportate dai componenti ospitati senza passare dal Registro di sistema. Più componenti possono esporre lo stesso ProgID per oggetti COM diversi e l'applicazione di hosting deve trovare solo il contesto di attivazione appropriato e quindi usare CLSIDFromProgID e CoCreateInstance per ottenere i puntatori dell'interfaccia dell'oggetto ospitata.